Fixed some bugs in my recently submitted patch series.

diff --git a/server/serial.c b/server/serial.c
index 173c8c3..dd5f90c 100644
--- a/server/serial.c
+++ b/server/serial.c
@@ -21,6 +21,7 @@
  */
 
 #include "config.h"
+#include "wine/port.h"
 
 #include <assert.h>
 #include <fcntl.h>
@@ -282,6 +283,8 @@
 
     if ( status == STATUS_PENDING )
     {
+        struct pollfd pfd;
+
         if ( !async )
             async = create_async ( obj, current, ptr );
         if ( !async )
@@ -293,6 +296,19 @@
             async_add_timeout(async,timeout);
             async_insert(q, async);
         }
+
+        /* Check if the new pending request can be served immediately */
+        pfd.fd = obj->fd;
+        pfd.events = serial_get_poll_events ( obj );
+        pfd.revents = 0;
+        poll ( &pfd, 1, 0 );
+
+        if ( pfd.revents )
+            /* serial_poll_event() calls set_select_events() */
+            serial_poll_event ( obj, pfd.revents );
+        else
+            set_select_events ( obj, pfd.events );
+        return;
     }
     else if ( async ) destroy_async ( async );
     else set_error ( STATUS_INVALID_PARAMETER );