diff options
Diffstat (limited to 'winsup/cygwin/thread.cc')
-rw-r--r-- | winsup/cygwin/thread.cc | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/winsup/cygwin/thread.cc b/winsup/cygwin/thread.cc index ad9061952..08eb10dd2 100644 --- a/winsup/cygwin/thread.cc +++ b/winsup/cygwin/thread.cc @@ -113,15 +113,17 @@ __cygwin_lock_unlock (_LOCK_T *lock) } static inline verifyable_object_state -verifyable_object_isvalid (void const * objectptr, long magic, void *static_ptr1, +verifyable_object_isvalid (void const *objectptr, long magic, void *static_ptr1, void *static_ptr2, void *static_ptr3) { - verifyable_object **object = (verifyable_object **) objectptr; - myfault efault; - if (efault.faulted ()) + /* Check for NULL pointer specifically since it is a cheap test and avoids the + overhead of setting up the fault handler. */ + if (!objectptr || efault.faulted ()) return INVALID_OBJECT; + verifyable_object **object = (verifyable_object **) objectptr; + if ((static_ptr1 && *object == static_ptr1) || (static_ptr2 && *object == static_ptr2) || (static_ptr3 && *object == static_ptr3)) |