Use the service thread for comm notifications.

diff --git a/misc/comm.c b/misc/comm.c
index 25b5a7c..78bb93e 100644
--- a/misc/comm.c
+++ b/misc/comm.c
@@ -64,7 +64,8 @@
 #include "server.h"
 #include "process.h"
 #include "winerror.h"
-#include "async.h"
+#include "services.h"
+#include "file.h"
 
 #include "debugtools.h"
 
@@ -213,12 +214,12 @@
     return ioctl(fd, TIOCMSET, &mstat);
 }
 	
-static void comm_notification(int fd,void*private)
+static void CALLBACK comm_notification( ULONG_PTR private )
 {
   struct DosDeviceStruct *ptr = (struct DosDeviceStruct *)private;
   int prev, bleft, len;
   WORD mask = 0;
-  int cid = GetCommPort_fd(fd);
+  int cid = GetCommPort_fd(ptr->fd);
 
   TRACE("async notification\n");
   /* read data from comm port */
@@ -226,7 +227,7 @@
   do {
     bleft = ((ptr->ibuf_tail > ptr->ibuf_head) ? (ptr->ibuf_tail-1) : ptr->ibuf_size)
       - ptr->ibuf_head;
-    len = read(fd, ptr->inbuf + ptr->ibuf_head, bleft?bleft:1);
+    len = read(ptr->fd, ptr->inbuf + ptr->ibuf_head, bleft?bleft:1);
     if (len > 0) {
       if (!bleft) {
 	ptr->commerror = CE_RXOVER;
@@ -257,7 +258,7 @@
 
   /* write any TransmitCommChar character */
   if (ptr->xmit>=0) {
-    len = write(fd, &(ptr->xmit), 1);
+    len = write(ptr->fd, &(ptr->xmit), 1);
     if (len > 0) ptr->xmit = -1;
   }
   /* write from output queue */
@@ -265,7 +266,7 @@
   do {
     bleft = ((ptr->obuf_tail <= ptr->obuf_head) ? ptr->obuf_head : ptr->obuf_size)
       - ptr->obuf_tail;
-    len = bleft ? write(fd, ptr->outbuf + ptr->obuf_tail, bleft) : 0;
+    len = bleft ? write(ptr->fd, ptr->outbuf + ptr->obuf_tail, bleft) : 0;
     if (len > 0) {
       ptr->obuf_tail += len;
       if (ptr->obuf_tail >= ptr->obuf_size)
@@ -455,10 +456,12 @@
 			  return IE_MEMORY;
 			}
 
-			/* enable async notifications */
-			ASYNC_RegisterFD(COM[port].fd,comm_notification,&COM[port]);
+                        COM[port].service = SERVICE_AddObject( FILE_DupUnixHandle( COM[port].fd,
+                                                     GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE ),
+                                                               comm_notification,
+                                                               (ULONG_PTR)&COM[port] );
 			/* bootstrap notifications, just in case */
-			comm_notification(COM[port].fd,&COM[port]);
+			comm_notification( (ULONG_PTR)&COM[port] );
 			return port;
 		}
 	} 
@@ -499,8 +502,7 @@
 		/* COM port */
 		SEGPTR_FREE(unknown[cid]); /* [LW] */
 
-		/* disable async notifications */
-		ASYNC_UnregisterFD(COM[cid].fd,comm_notification);
+                SERVICE_Delete( COM[cid].service );
 		/* free buffers */
 		free(ptr->outbuf);
 		free(ptr->inbuf);