[beast/win32] Use an adequate replacement for pipes as thread synchronization method.
- From: Stefan Westerfeld <stw src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [beast/win32] Use an adequate replacement for pipes as thread synchronization method.
- Date: Mon, 28 Sep 2009 10:33:54 +0000 (UTC)
commit 482976bff35249fa6f89d72ddf14b868e9d3fc3b
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]