This file is part of mingw-cross-env. See doc/index.html for further information. This patch has been taken from: http://sourceware.org/ml/pthreads-win32/2010/msg00006.html diff -ur pthreads-win32-20091019.orig/GNUmakefile pthreads-win32-20091019/GNUmakefile --- pthreads-win32-20091019.orig/GNUmakefile 2009-10-19 08:07:32.000000000 -0200 +++ pthreads-win32-20091019/GNUmakefile 2010-02-01 14:45:28.471432337 -0200 @@ -63,7 +63,6 @@ XOPT = RCFLAGS = --include-dir=. -LFLAGS = -lwsock32 # ---------------------------------------------------------------------- # The library can be built with some alternative behaviour to diff -ur pthreads-win32-20091019.orig/pthread.c pthreads-win32-20091019/pthread.c --- pthreads-win32-20091019.orig/pthread.c 2009-10-19 08:07:32.000000000 -0200 +++ pthreads-win32-20091019/pthread.c 2010-02-01 14:26:48.601487556 -0200 @@ -49,6 +49,7 @@ #include "condvar.c" #include "create.c" #include "dll.c" +#include "autostatic.c" #include "errno.c" #include "exit.c" #include "fork.c" diff -ur pthreads-win32-20091019.orig/pthread_getspecific.c pthreads-win32-20091019/pthread_getspecific.c --- pthreads-win32-20091019.orig/pthread_getspecific.c 2009-10-19 08:07:32.000000000 -0200 +++ pthreads-win32-20091019/pthread_getspecific.c 2010-02-01 14:28:36.603981857 -0200 @@ -72,12 +72,10 @@ else { int lasterror = GetLastError (); - int lastWSAerror = WSAGetLastError (); ptr = TlsGetValue (key->key); SetLastError (lasterror); - WSASetLastError (lastWSAerror); } return ptr; diff -ur pthreads-win32-20091019.orig/pthread.h pthreads-win32-20091019/pthread.h --- pthreads-win32-20091019.orig/pthread.h 2009-10-19 08:07:32.000000000 -0200 +++ pthreads-win32-20091019/pthread.h 2010-02-02 16:51:05.047931915 -0200 @@ -533,7 +533,7 @@ * do NOT define PTW32_BUILD, and then the variables/functions will * be imported correctly. */ -#ifndef PTW32_STATIC_LIB +#if !defined(PTW32_STATIC_LIB) && !defined(__MINGW32__) # ifdef PTW32_BUILD # define PTW32_DLLPORT __declspec (dllexport) # else diff -ur pthreads-win32-20091019.orig/sched.h pthreads-win32-20091019/sched.h --- pthreads-win32-20091019.orig/sched.h 2009-10-19 08:07:32.000000000 -0200 +++ pthreads-win32-20091019/sched.h 2010-02-02 16:51:00.665887720 -0200 @@ -76,7 +76,7 @@ * do NOT define PTW32_BUILD, and then the variables/functions will * be imported correctly. */ -#ifndef PTW32_STATIC_LIB +#if !defined(PTW32_STATIC_LIB) && !defined(__MINGW32__) # ifdef PTW32_BUILD # define PTW32_DLLPORT __declspec (dllexport) # else diff -ur pthreads-win32-20091019.orig/semaphore.h pthreads-win32-20091019/semaphore.h --- pthreads-win32-20091019.orig/semaphore.h 2009-10-19 08:07:32.000000000 -0200 +++ pthreads-win32-20091019/semaphore.h 2010-02-02 16:50:45.916576916 -0200 @@ -75,7 +75,7 @@ * do NOT define PTW32_BUILD, and then the variables/functions will * be imported correctly. */ -#ifndef PTW32_STATIC_LIB +#if !defined(PTW32_STATIC_LIB) && !defined(__MINGW32__) # ifdef PTW32_BUILD # define PTW32_DLLPORT __declspec (dllexport) # else --- /dev/null 2010-01-29 12:57:37.677072272 -0200 +++ pthreads-win32-20091019/autostatic.c 2010-02-01 14:26:48.601487556 -0200 @@ -0,0 +1,67 @@ +/* + * autostatic.c + * + * Description: + * This translation unit implements static library initialisation. + * + * -------------------------------------------------------------------------- + * + * Pthreads-win32 - POSIX Threads Library for Win32 + * Copyright(C) 1998 John E. Bossom + * Copyright(C) 1999,2005 Pthreads-win32 contributors + * + * Contact Email: rpj@callisto.canberra.edu.au + * + * The current list of contributors is contained + * in the file CONTRIBUTORS included with the source + * code distribution. The list can also be seen at the + * following World Wide Web location: + * http://sources.redhat.com/pthreads-win32/contributors.html + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library in the file COPYING.LIB; + * if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#ifdef PTW32_STATIC_LIB + +#include "pthread.h" +#include "implement.h" + +static void on_process_init(void) +{ + pthread_win32_process_attach_np (); +} + +static void on_process_exit(void) +{ + pthread_win32_thread_detach_np (); + pthread_win32_process_detach_np (); +} + +#ifdef __MINGW32__ +# define attribute_section(a) __attribute__((section(a))) +#elif defined(_MSC_VER) +# define attribute_section(a) __pragma(section(a,long,read)); __declspec(allocate(a)) +#else +#error compiler not supported! +#endif + +attribute_section(".CRT$XCU") void *msc_ctor = on_process_init; +attribute_section(".CRT$XPU") void *msc_dtor = on_process_exit; + +attribute_section(".ctors" ) void *gcc_ctor = on_process_init; +attribute_section(".dtors" ) void *gcc_dtor = on_process_exit; + +#endif /* PTW32_STATIC_LIB */