diff --git a/Source/CFRunLoop.c b/Source/CFRunLoop.c index 88a4ad2..392b2e6 100644 --- a/Source/CFRunLoop.c +++ b/Source/CFRunLoop.c @@ -1587,6 +1587,7 @@ CFRunLoopObserverCreate (CFAllocatorRef alloc, CFOptionFlags activities, if (new) { GSMutexInitialize (&(new->_lock)); + new->_isValid = true; new->_activities = activities; new->_repeats = repeats; new->_order = order; diff --git a/Tests/CFRunLoop/observer_valid.m b/Tests/CFRunLoop/observer_valid.m new file mode 100644 index 0000000..e545995 --- /dev/null +++ b/Tests/CFRunLoop/observer_valid.m @@ -0,0 +1,22 @@ +#include "CoreFoundation/CFRunLoop.h" +#include "../CFTesting.h" + +static void +observe (CFRunLoopObserverRef o, CFRunLoopActivity a, void *info) +{ +} + +int main (void) +{ + CFRunLoopObserverRef obs = CFRunLoopObserverCreate (NULL, + kCFRunLoopBeforeWaiting, false, 0, observe, NULL); + + PASS_CF (CFRunLoopObserverIsValid (obs) == true, "A new observer is valid."); + + CFRunLoopObserverInvalidate (obs); + PASS_CF (CFRunLoopObserverIsValid (obs) == false, + "An invalidated observer is no longer valid."); + + CFRelease (obs); + return 0; +}