[libdispatch-changes] [213] trunk/src/semaphore.c
source_changes at macosforge.org
source_changes at macosforge.org
Wed Aug 8 22:08:50 PDT 2012
Revision: 213
http://trac.macosforge.org/projects/libdispatch/changeset/213
Author: dsteffen at apple.com
Date: 2012-08-08 22:08:50 -0700 (Wed, 08 Aug 2012)
Log Message:
-----------
<rdar://problem/11754320>
Modified Paths:
--------------
trunk/src/semaphore.c
Modified: trunk/src/semaphore.c
===================================================================
--- trunk/src/semaphore.c 2012-08-09 05:08:47 UTC (rev 212)
+++ trunk/src/semaphore.c 2012-08-09 05:08:50 UTC (rev 213)
@@ -188,8 +188,7 @@
return 0;
}
if (slowpath(value == LONG_MIN)) {
- DISPATCH_CLIENT_CRASH("Unbalanced call to dispatch_group_leave() or "
- "dispatch_semaphore_signal()");
+ DISPATCH_CLIENT_CRASH("Unbalanced call to dispatch_semaphore_signal()");
}
return _dispatch_semaphore_signal_slow(dsema);
}
@@ -377,9 +376,12 @@
dispatch_group_leave(dispatch_group_t dg)
{
dispatch_semaphore_t dsema = (dispatch_semaphore_t)dg;
-
- dispatch_semaphore_signal(dsema);
- if (dsema->dsema_value == dsema->dsema_orig) {
+ dispatch_atomic_release_barrier();
+ long value = dispatch_atomic_inc2o(dsema, dsema_value);
+ if (slowpath(value == LONG_MIN)) {
+ DISPATCH_CLIENT_CRASH("Unbalanced call to dispatch_group_leave()");
+ }
+ if (slowpath(value == dsema->dsema_orig)) {
(void)_dispatch_group_wake(dsema);
}
}
@@ -534,7 +536,7 @@
prev->dsn_next = dsn;
} else {
_dispatch_retain(dg);
- dsema->dsema_notify_head = dsn;
+ (void)dispatch_atomic_xchg2o(dsema, dsema_notify_head, dsn);
if (dsema->dsema_value == dsema->dsema_orig) {
_dispatch_group_wake(dsema);
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/libdispatch-changes/attachments/20120808/c3e281ca/attachment.html>
More information about the libdispatch-changes
mailing list