[beast/win32: 42/44] Use an adequate replacement for pipes as thread synchronization method.



commit 47c2771627912560f1207e5bc5c4fc5c16f563cb
Author: Stefan Westerfeld <stefan space twc de>
Date:   Mon Sep 28 10:33:32 2009 +0200

    Use an adequate replacement for pipes as thread synchronization method.

 bse/bseenginemaster.c |    6 +++++-
 bse/bseenginemaster.h |    5 +++++
 2 files changed, 10 insertions(+), 1 deletions(-)
---
diff --git a/bse/bseenginemaster.c b/bse/bseenginemaster.c
index be3616e..3e1ce87 100644
--- a/bse/bseenginemaster.c
+++ b/bse/bseenginemaster.c
@@ -1181,6 +1181,9 @@ bse_engine_master_thread (EngineMasterData *mdata)
 	    loop.revents_filled = TRUE;
 	  else if (errno != EINTR)
 	    g_printerr ("%s: poll() error: %s\n", G_STRFUNC, g_strerror (errno));
+#else
+	  bse_win32_waiter_wait (mdata->win32_waiter, loop.timeout);
+	  loop.revents_filled = TRUE;
 #endif
 	  if (loop.revents_filled)
 	    need_dispatch = _engine_master_check (&loop);
@@ -1188,7 +1191,7 @@ bse_engine_master_thread (EngineMasterData *mdata)
       
       if (need_dispatch)
 	_engine_master_dispatch ();
-      
+#ifndef WIN32
       /* clear wakeup pipe */
       {
 	guint8 data[64];
@@ -1197,6 +1200,7 @@ bse_engine_master_thread (EngineMasterData *mdata)
 	  l = read (mdata->wakeup_pipe[0], data, sizeof (data));
 	while ((l < 0 && errno == EINTR) || l == sizeof (data));
       }
+#endif
       
       /* wakeup user thread if necessary */
       if (bse_engine_has_garbage ())
diff --git a/bse/bseenginemaster.h b/bse/bseenginemaster.h
index cacfc3a..80f8f40 100644
--- a/bse/bseenginemaster.h
+++ b/bse/bseenginemaster.h
@@ -18,6 +18,7 @@
 #define __BSE_ENGINE_MASTER_H__
 
 #include <bse/bseengine.h>
+#include <bse/bsewin32.h>
 
 G_BEGIN_DECLS
 
@@ -28,7 +29,11 @@ void		_engine_master_dispatch_jobs	(void);
 void		_engine_master_dispatch		(void);
 typedef struct {
   BirnetThread *user_thread;
+#ifndef WIN32
   gint       wakeup_pipe[2];	/* read(wakeup_pipe[0]), write(wakeup_pipe[1]) */
+#else
+  BseWin32Waiter *win32_waiter;
+#endif
 } EngineMasterData;
 void		bse_engine_master_thread	(EngineMasterData	*mdata);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]