Use InterlockedDecrement64 () for Interlocked.Decrement (long&).
[mono.git] / mono / io-layer / error.c
index 41356f4f69b186c653fac5efa8a28df31d239124..e45fff4bcdda3efa2f323e8b5f72240d22b18683 100644 (file)
@@ -17,6 +17,7 @@
 
 static pthread_key_t error_key;
 static mono_once_t error_key_once=MONO_ONCE_INIT;
+extern gboolean _wapi_has_shut_down;
 
 static void error_init(void)
 {
@@ -46,7 +47,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 +67,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 +177,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);