From bf65a196055946184d165746ac29eee853a632ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Ludwig?= Date: Mon, 6 May 2013 20:41:14 +0200 Subject: [PATCH] Fix malfunction of multiple Libevent2ManualEvent instances. Two fields were erroneously "__gshared", which implies "static" and thus caused the fields to be shared among all instances. --- source/vibe/core/drivers/libevent2.d | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/vibe/core/drivers/libevent2.d b/source/vibe/core/drivers/libevent2.d index fcdd50350e..320f130b6d 100644 --- a/source/vibe/core/drivers/libevent2.d +++ b/source/vibe/core/drivers/libevent2.d @@ -326,9 +326,9 @@ class Libevent2ManualEvent : ManualEvent { deimos.event2.event.event* event; bool[Task] tasks; } - shared int m_emitCount = 0; - __gshared core.sync.mutex.Mutex m_mutex; - __gshared HashMap!(Thread, ThreadSlot) m_waiters; + shared(int) m_emitCount = 0; + core.sync.mutex.Mutex m_mutex; + HashMap!(Thread, ThreadSlot) m_waiters; } this() @@ -349,7 +349,7 @@ class Libevent2ManualEvent : ManualEvent { { atomicOp!"+="(m_emitCount, 1); synchronized (m_mutex) { - foreach (sl; m_waiters) + foreach (ref sl; m_waiters) event_active(sl.event, 0, 0); } } @@ -362,7 +362,6 @@ class Libevent2ManualEvent : ManualEvent { int wait(int reference_emit_count) { assert(!amOwner()); - auto self = Fiber.getThis(); acquire(); scope(exit) release(); auto ec = this.emitCount; @@ -376,11 +375,12 @@ class Libevent2ManualEvent : ManualEvent { int wait(Duration timeout, int reference_emit_count) { assert(!amOwner()); - auto self = Fiber.getThis(); acquire(); scope(exit) release(); scope tm = new Libevent2Timer(cast(Libevent2Driver)getEventDriver(), null); tm.rearm(timeout); + tm.acquire(); + scope(exit) tm.release(); auto ec = this.emitCount; while( ec == reference_emit_count ){