Merge pull request #3725 from ntherning/fix-symbolicate-tests-stack-trace-diff-on...
[mono.git] / mono / io-layer / error.c
index 41356f4f69b186c653fac5efa8a28df31d239124..db128be5c72a6c3948f3056f915c02284e5461ca 100644 (file)
@@ -14,6 +14,8 @@
 #include <errno.h>
 
 #include "mono/io-layer/wapi.h"
+#include "mono/io-layer/wapi-private.h"
+#include "mono/utils/mono-once.h"
 
 static pthread_key_t error_key;
 static mono_once_t error_key_once=MONO_ONCE_INIT;
@@ -46,7 +48,9 @@ guint32 GetLastError(void)
 {
        guint32 err;
        void *errptr;
-       
+
+       if (_wapi_has_shut_down)
+               return 0;
        mono_once(&error_key_once, error_init);
        errptr=pthread_getspecific(error_key);
        err=GPOINTER_TO_UINT(errptr);
@@ -64,6 +68,8 @@ void SetLastError(guint32 code)
 {
        int ret;
        
+       if (_wapi_has_shut_down)
+               return;
        /* Set the thread-local error code */
        mono_once(&error_key_once, error_init);
        ret = pthread_setspecific(error_key, GUINT_TO_POINTER(code));
@@ -172,6 +178,12 @@ errno_to_WSA (guint32 code, const gchar *function_name)
 #ifdef EDESTADDRREQ
        case EDESTADDRREQ: result = WSAEDESTADDRREQ; break;
 #endif
+#ifdef EHOSTDOWN
+       case EHOSTDOWN: result = WSAEHOSTDOWN; break;
+#endif
+#ifdef ENETDOWN
+       case ENETDOWN: result = WSAENETDOWN; break;
+#endif 
        case ENODEV: result = WSAENETDOWN; break;
        default:
                sys_error = strerror (code);