This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Patch] Fix mingw32 breakage from static mutex patch.


The static mutex patch for PR c++/13684
http://gcc.gnu.org/ml/gcc-patches/2004-08/msg02293.html

breaks build of mingw32. 

This fixes the breakage, and causes no new regressions.  

2004-08-31  Wu Yongwei  <adah@sh163.net>
	    Danny Smith  <dannysmith@users.sourceforge.net>

	* gthr-win32.h (__gthread_recursive_mutex_t): Use 'unsigned long',
	not Windows 'DWORD'.
	(__GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION): Correct typo.
	(__GTHREAD_RECURSIVE_MUTEX_INIT_DEFAULT): Likewise.
	(__gthr_win32_recursive_mutex_init_function): Add prototype for
	__GTHREAD_HIDE_WIN32API case.
	(__gthr_win32_recursive_mutex_lock): Likewise.
	(__gthr_win32_recursive_mutex_trylock): Likewise.
	(__gthr_win32_recursive_mutex_unlock): Likewise.
	(__gthread_recursive_mutex_init_function): Add definition for
	__GTHREAD_HIDE_WIN32API case.
	(__gthread_recursive_mutex_lock): Correct call to InterlockedDecrement.
	* config/i386/grthr-win32.c (__gthread_recursive_mutex_lock): Correct
	call to InterlockedDecrement.

Index: gthr-win32.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/gthr-win32.h,v
retrieving revision 1.24
diff -c -3 -p -r1.24 gthr-win32.h
*** gthr-win32.h	28 Aug 2004 02:33:48 -0000	1.24
--- gthr-win32.h	30 Aug 2004 22:00:08 -0000
*************** typedef struct {
*** 346,360 ****
  typedef struct {
    long counter;
    long depth;
!   DWORD owner;
    void *sema;
  } __gthread_recursive_mutex_t;
  
  #define __GTHREAD_ONCE_INIT {0, -1}
  #define __GTHREAD_MUTEX_INIT_FUNCTION __gthread_mutex_init_function
  #define __GTHREAD_MUTEX_INIT_DEFAULT {-1, 0}
! #define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_mutex_init_function
! #define __GTHREAD_RECURSIVE_MUTEX_INIT_DEFAULT {-1, 0}
  
  #if __MINGW32_MAJOR_VERSION >= 1 || \
    (__MINGW32_MAJOR_VERSION == 0 && __MINGW32_MINOR_VERSION > 2)
--- 346,360 ----
  typedef struct {
    long counter;
    long depth;
!   unsigned long owner;
    void *sema;
  } __gthread_recursive_mutex_t;
  
  #define __GTHREAD_ONCE_INIT {0, -1}
  #define __GTHREAD_MUTEX_INIT_FUNCTION __gthread_mutex_init_function
  #define __GTHREAD_MUTEX_INIT_DEFAULT {-1, 0}
! #define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION
__gthread_recursive_mutex_init_function
! #define __GTHREAD_RECURSIVE_MUTEX_INIT_DEFAULT {-1, 0, 0, 0}
  
  #if __MINGW32_MAJOR_VERSION >= 1 || \
    (__MINGW32_MAJOR_VERSION == 0 && __MINGW32_MINOR_VERSION > 2)
*************** extern void __gthr_win32_mutex_init_func
*** 414,419 ****
--- 414,423 ----
  extern int __gthr_win32_mutex_lock (__gthread_mutex_t *);
  extern int __gthr_win32_mutex_trylock (__gthread_mutex_t *);
  extern int __gthr_win32_mutex_unlock (__gthread_mutex_t *);
+ extern void __gthr_win32_recursive_mutex_init_function
(__gthread_recursive_mutex_t *);
+ extern int __gthr_win32_recursive_mutex_lock (__gthread_recursive_mutex_t *);
+ extern int __gthr_win32_recursive_mutex_trylock (__gthread_recursive_mutex_t
*);
+ extern int __gthr_win32_recursive_mutex_unlock (__gthread_recursive_mutex_t
*);
  
  static inline int
  __gthread_once (__gthread_once_t *once, void (*func) (void))
*************** __gthread_mutex_unlock (__gthread_mutex_
*** 481,486 ****
--- 485,496 ----
      return 0;
  }
  
+ static inline void
+ __gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *mutex)
+ {
+    __gthr_win32_recursive_mutex_init_function (mutex);
+ }
+ 
  static inline int
  __gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *mutex)
  {
*************** __gthread_recursive_mutex_lock (__gthrea
*** 668,674 ****
  	}
        else if (mutex->owner == me)
  	{
! 	  InterlockedDecrement (&mx->lock_idx);
  	  ++(mutex->depth);
  	}
        else if (WaitForSingleObject (mutex->sema, INFINITE) == WAIT_OBJECT_0)
--- 678,684 ----
  	}
        else if (mutex->owner == me)
  	{
! 	  InterlockedDecrement (&mutex->counter);
  	  ++(mutex->depth);
  	}
        else if (WaitForSingleObject (mutex->sema, INFINITE) == WAIT_OBJECT_0)
Index: config/i386/gthr-win32.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/i386/gthr-win32.c,v
retrieving revision 1.8
diff -c -3 -p -r1.8 gthr-win32.c
*** config/i386/gthr-win32.c	28 Aug 2004 02:33:48 -0000	1.8
--- config/i386/gthr-win32.c	30 Aug 2004 22:00:08 -0000
*************** __gthr_win32_recursive_mutex_lock (__gth
*** 203,209 ****
      }
    else if (mutex->owner == me)
      {
!       InterlockedDecrement (&mx->lock_idx);
        ++(mutex->depth);
      }
    else if (WaitForSingleObject (mutex->sema, INFINITE) == WAIT_OBJECT_0)
--- 203,209 ----
      }
    else if (mutex->owner == me)
      {
!       InterlockedDecrement (&mutex->counter);
        ++(mutex->depth);
      }
    else if (WaitForSingleObject (mutex->sema, INFINITE) == WAIT_OBJECT_0)

Find local movie times and trailers on Yahoo! Movies.
http://au.movies.yahoo.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]