diff --git a/scheduler/synchro.c b/scheduler/synchro.c
index 8c82f40b343795bff17e4dd1f5179a698aa22a2e..ec73de732711e95ef4de901e97a0d52cb03f7b59 100644
--- a/scheduler/synchro.c
+++ b/scheduler/synchro.c
@@ -106,7 +106,7 @@ DWORD WINAPI WaitForMultipleObjectsEx( DWORD count, const HANDLE *handles,
         for (i = 0; i < len / sizeof(void*); i += 2)
         {
             PAPCFUNC func = (PAPCFUNC)apc[i];
-            func( (ULONG_PTR)apc[i+1] );
+            if ( func ) func( (ULONG_PTR)apc[i+1] );
         }
     }
     return reply.signaled;
diff --git a/server/thread.c b/server/thread.c
index 9af06acf4061c51c0465190abaed5d82f222243c..bf8a2ca19bf82cedeb9e7e4a26e6abd49378e10e 100644
--- a/server/thread.c
+++ b/server/thread.c
@@ -482,11 +482,6 @@ void wake_up( struct object *obj, int max )
 int thread_queue_apc( struct thread *thread, void *func, void *param )
 {
     struct thread_apc *apc;
-    if (!func)
-    {
-        SET_ERROR( ERROR_INVALID_PARAMETER );
-        return 0;
-    }
     if (!thread->apc)
     {
         if (!(thread->apc = mem_alloc( MAX_THREAD_APC * sizeof(*apc) )))