Eric Pouech : wineconsole: Move the curses critical section inside the private data.

Alexandre Julliard julliard at winehq.org
Mon Nov 29 13:38:37 CST 2010


Module: wine
Branch: master
Commit: ac256c7352bd597c6264faf8ac2ac478c4867635
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ac256c7352bd597c6264faf8ac2ac478c4867635

Author: Eric Pouech <eric.pouech at orange.fr>
Date:   Sun Nov 28 22:10:49 2010 +0100

wineconsole: Move the curses critical section inside the private data.

---

 programs/wineconsole/curses.c |   13 +++++++------
 1 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/programs/wineconsole/curses.c b/programs/wineconsole/curses.c
index 172ac47..f1cab51 100644
--- a/programs/wineconsole/curses.c
+++ b/programs/wineconsole/curses.c
@@ -73,13 +73,12 @@ struct inner_data_curse
     unsigned long       initial_mouse_mask;
     int                 sync_pipe[2];
     HANDLE              input_thread;
+    CRITICAL_SECTION    lock;
     WINDOW*             pad;
     chtype*             line;
     int                 allow_scroll;
 };
 
-static CRITICAL_SECTION WCCURSES_CritSect;
-
 static void *nc_handle = NULL;
 
 #ifdef initscr  /* work around Solaris breakage */
@@ -953,7 +952,7 @@ static DWORD CALLBACK input_thread( void *arg )
         if (!(pfd[0].revents & POLLIN)) continue;
 
         /* we're called from input thread (not main thread), so force unique access */
-        EnterCriticalSection(&WCCURSES_CritSect);
+        EnterCriticalSection(&PRIVATE(data)->lock);
         if ((inchar = wgetch(stdscr)) != ERR)
         {
             WINE_TRACE("Got o%o (0x%x)\n", inchar,inchar);
@@ -965,7 +964,7 @@ static DWORD CALLBACK input_thread( void *arg )
 
             if (numEvent) WriteConsoleInputW(data->hConIn, ir, numEvent, &n);
         }
-        LeaveCriticalSection(&WCCURSES_CritSect);
+        LeaveCriticalSection(&PRIVATE(data)->lock);
     }
     close( PRIVATE(data)->sync_pipe[0] );
     return 0;
@@ -986,6 +985,7 @@ static void WCCURSES_DeleteBackend(struct inner_data* data)
         WaitForSingleObject( PRIVATE(data)->input_thread, INFINITE );
         CloseHandle( PRIVATE(data)->input_thread );
     }
+    DeleteCriticalSection(&PRIVATE(data)->lock);
 
     delwin(PRIVATE(data)->pad);
 #ifdef HAVE_MOUSEMASK
@@ -1018,9 +1018,9 @@ static int WCCURSES_MainLoop(struct inner_data* data)
 
     while (cont && WaitForSingleObject(data->hSynchro, INFINITE) == WAIT_OBJECT_0)
     {
-        EnterCriticalSection(&WCCURSES_CritSect);
+        EnterCriticalSection(&PRIVATE(data)->lock);
         cont = WINECON_GrabChanges(data);
-        LeaveCriticalSection(&WCCURSES_CritSect);
+        LeaveCriticalSection(&PRIVATE(data)->lock);
     }
 
     close( PRIVATE(data)->sync_pipe[1] );
@@ -1103,6 +1103,7 @@ enum init_return WCCURSES_InitBackend(struct inner_data* data)
         PRIVATE(data)->initial_mouse_mask = mm;
     }
 #endif
+    InitializeCriticalSection(&PRIVATE(data)->lock);
 
     return init_success;
 }




More information about the wine-cvs mailing list