Fixed some bugs in my recently submitted patch series.
diff --git a/server/file.c b/server/file.c
index 6908292..cdfb580 100644
--- a/server/file.c
+++ b/server/file.c
@@ -389,6 +389,8 @@
if ( status == STATUS_PENDING )
{
+ struct pollfd pfd;
+
if ( !async )
async = create_async ( obj, current, ptr );
if ( !async )
@@ -397,6 +399,15 @@
async->status = STATUS_PENDING;
if ( !async->q )
async_insert( q, async );
+
+ /* Check if the new pending request can be served immediately */
+ pfd.fd = obj->fd;
+ pfd.events = file_get_poll_events ( obj );
+ pfd.revents = 0;
+ poll ( &pfd, 1, 0 );
+
+ if ( pfd.revents )
+ file_poll_event ( obj, pfd.revents );
}
else if ( async ) destroy_async ( async );
else set_error ( STATUS_INVALID_PARAMETER );