Rémi Bernon (@rbernon) commented about server/async.c:
+static void async_cancel_dump( struct object *obj, int verbose ) +{
- struct async_cancel *cancel = (struct async_cancel *)obj;
- assert( obj->ops == &async_cancel_ops );
- fprintf( stderr, "async_cancel %p\n", cancel );
+}
+static void async_cancel_satisfied( struct object *obj, struct wait_queue_entry *entry ) +{
- struct async_cancel *cancel = (struct async_cancel *)obj;
- assert( obj->ops == &async_cancel_ops );
- /* close wait handle here to avoid extra server round trip */
- close_handle( cancel->process, cancel->wait_handle );
- cancel->wait_handle = 0;
+}
As we now use a sync object, and with ntsync anyway, this will never be called. You need to close the handle properly on the client side. The `async_cancel_satisfied` and `wait_handle` members also need to be removed.