[前][次][番号順一覧][スレッド一覧]

ruby-changes:24068

From: nobu <ko1@a...>
Date: Sun, 17 Jun 2012 16:21:18 +0900 (JST)
Subject: [ruby-changes:24068] nobu:r36119 (trunk): thread_win32.h: rb_thread_lock_t for USE_WIN32_MUTEX

nobu	2012-06-17 16:21:03 +0900 (Sun, 17 Jun 2012)

  New Revision: 36119

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=36119

  Log:
    thread_win32.h: rb_thread_lock_t for USE_WIN32_MUTEX
    
    * thread_win32.h (rb_thread_lock_t): make a union for USE_WIN32_MUTEX.
      this internal is used only in thread_win32.c, but has to be complete
      to define rb_thread_t.

  Modified files:
    trunk/ChangeLog
    trunk/thread_win32.c
    trunk/thread_win32.h

Index: thread_win32.c
===================================================================
--- thread_win32.c	(revision 36118)
+++ thread_win32.c	(revision 36119)
@@ -340,9 +340,9 @@
 native_mutex_lock(rb_thread_lock_t *lock)
 {
 #if USE_WIN32_MUTEX
-    w32_mutex_lock(*lock);
+    w32_mutex_lock(lock->mutex);
 #else
-    EnterCriticalSection(lock);
+    EnterCriticalSection(&lock->crit);
 #endif
     return 0;
 }
@@ -351,10 +351,10 @@
 native_mutex_unlock(rb_thread_lock_t *lock)
 {
 #if USE_WIN32_MUTEX
-    thread_debug("release mutex: %p\n", *lock);
-    return ReleaseMutex(*lock);
+    thread_debug("release mutex: %p\n", lock->mutex);
+    return ReleaseMutex(lock->mutex);
 #else
-    LeaveCriticalSection(lock);
+    LeaveCriticalSection(&lock->crit);
     return 0;
 #endif
 }
@@ -364,8 +364,8 @@
 {
 #if USE_WIN32_MUTEX
     int result;
-    thread_debug("native_mutex_trylock: %p\n", *lock);
-    result = w32_wait_events(&*lock, 1, 1, 0);
+    thread_debug("native_mutex_trylock: %p\n", lock->mutex);
+    result = w32_wait_events(&lock->mutex, 1, 1, 0);
     thread_debug("native_mutex_trylock result: %d\n", result);
     switch (result) {
       case WAIT_OBJECT_0:
@@ -375,7 +375,7 @@
     }
     return EINVAL;
 #else
-    return TryEnterCriticalSection(lock) == 0;
+    return TryEnterCriticalSection(&lock->crit) == 0;
 #endif
 }
 
@@ -383,10 +383,10 @@
 native_mutex_initialize(rb_thread_lock_t *lock)
 {
 #if USE_WIN32_MUTEX
-    *lock = w32_mutex_create();
-    /* thread_debug("initialize mutex: %p\n", *lock); */
+    lock->mutex = w32_mutex_create();
+    /* thread_debug("initialize mutex: %p\n", lock->mutex); */
 #else
-    InitializeCriticalSection(lock);
+    InitializeCriticalSection(&lock->crit);
 #endif
 }
 
@@ -394,9 +394,9 @@
 native_mutex_destroy(rb_thread_lock_t *lock)
 {
 #if USE_WIN32_MUTEX
-    w32_close_handle(*lock);
+    w32_close_handle(lock->mutex);
 #else
-    DeleteCriticalSection(lock);
+    DeleteCriticalSection(&lock->crit);
 #endif
 }
 
Index: thread_win32.h
===================================================================
--- thread_win32.h	(revision 36118)
+++ thread_win32.h	(revision 36119)
@@ -22,7 +22,12 @@
 TryEnterCriticalSection(IN OUT LPCRITICAL_SECTION lpCriticalSection);
 
 typedef HANDLE rb_thread_id_t;
-typedef CRITICAL_SECTION rb_thread_lock_t;
+
+typedef union rb_thread_lock_union {
+    HANDLE mutex;
+    CRITICAL_SECTION crit;
+} rb_thread_lock_t;
+
 typedef struct rb_thread_cond_struct {
     struct cond_event_entry *next;
     struct cond_event_entry *prev;
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 36118)
+++ ChangeLog	(revision 36119)
@@ -1,5 +1,9 @@
-Sun Jun 17 16:20:56 2012  Nobuyoshi Nakada  <nobu@r...>
+Sun Jun 17 16:21:01 2012  Nobuyoshi Nakada  <nobu@r...>
 
+	* thread_win32.h (rb_thread_lock_t): make a union for USE_WIN32_MUTEX.
+	  this internal is used only in thread_win32.c, but has to be complete
+	  to define rb_thread_t.
+
 	* thread_win32.c (native_mutex_lock, native_mutex_destroy): fix for
 	  USE_WIN32_MUTEX.
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]