diff --git a/Source/CFRunLoop.c b/Source/CFRunLoop.c index 88a4ad23..183f8ecd 100644 --- a/Source/CFRunLoop.c +++ b/Source/CFRunLoop.c @@ -1325,7 +1325,7 @@ CFRunLoopCommonModesRemove (CFRunLoopRef rl, CFTypeRef obj) CFIndex idx; struct common_mode_info info = { rl, obj, false }; range = CFRangeMake (0, CFArrayGetCount (rl->_commonObjects)); - idx = CFArrayContainsValue (rl->_commonObjects, range, obj); + idx = CFArrayGetFirstIndexOfValue (rl->_commonObjects, range, obj); if (idx != kCFNotFound) CFArrayRemoveValueAtIndex (rl->_commonObjects, idx); diff --git a/Tests/CFRunLoop/common_remove.m b/Tests/CFRunLoop/common_remove.m new file mode 100644 index 00000000..5a307685 --- /dev/null +++ b/Tests/CFRunLoop/common_remove.m @@ -0,0 +1,41 @@ +#include + +#include "../CFTesting.h" +#include + +static void * +body (void *unused) +{ + CFRunLoopRef rl; + CFRunLoopSourceContext sc = {0}; + CFRunLoopSourceRef src; + + rl = CFRunLoopGetCurrent (); + CFRunLoopAddCommonMode (rl, CFSTR ("testCommonMode")); + + src = CFRunLoopSourceCreate (NULL, 0, &sc); + CFRunLoopAddSource (rl, src, kCFRunLoopCommonModes); + PASS_CF(CFRunLoopContainsSource (rl, src, kCFRunLoopCommonModes) == true, + "Source is in the common modes after being added."); + PASS_CF(CFRunLoopContainsSource (rl, src, kCFRunLoopDefaultMode) == true, + "Source reaches the default mode after being added to common modes."); + + CFRunLoopRemoveSource (rl, src, kCFRunLoopCommonModes); + PASS_CF(CFRunLoopContainsSource (rl, src, kCFRunLoopCommonModes) == false, + "Source is not in the common modes after being removed."); + PASS_CF(CFRunLoopContainsSource (rl, src, kCFRunLoopDefaultMode) == false, + "Source no longer reaches the default mode after common-modes removal."); + PASS_CF(CFRunLoopContainsSource (rl, src, CFSTR ("testCommonMode")) == false, + "Source no longer reaches a registered common mode after removal."); + CFRelease (src); + + return NULL; +} + +int main (void) +{ + pthread_t th; + pthread_create (&th, NULL, body, NULL); + pthread_join (th, NULL); + return 0; +}