async_private + ReadFile() etc. immediate completion

Martin Wilck Martin.Wilck at fujitsu-siemens.com
Fri Jan 11 09:38:41 CST 2002


Here are 2 small patches.
Both apply on top of the patch I sent yesterday  which started this
thread.

1) fixes a bug that I discovered myself,
2) Adds TRACES to several functions to simplify debugging.

2) Is not meant for applying to CVS!!!

However, Lawson it would be nice if you produce a new trace with these two
patches applied.

start your app with --debugmsg trace+file,trace+thread,trace+comm.

Regards,
Martin

-- 
Martin Wilck                Phone: +49 5251 8 15113
Fujitsu Siemens Computers   Fax:   +49 5251 8 20409
Heinz-Nixdorf-Ring 1	    mailto:Martin.Wilck at Fujitsu-Siemens.com
D-33106 Paderborn           http://www.fujitsu-siemens.com/primergy




-------------- next part --------------
ChangeLog:

scheduler/synchro.c: Fix a bug in 009-async_private.diff
        (Overlapped completion scheduled twice).

diff -ruX diffignore CVS/wine/scheduler/synchro.c MW/wine/scheduler/synchro.c
--- CVS/wine/scheduler/synchro.c	Fri Jan 11 10:51:11 2002
+++ MW/wine/scheduler/synchro.c	Fri Jan 11 11:03:40 2002
@@ -132,15 +132,10 @@
     }
     else ovp_status = ovp->ops->get_status (ovp);
 
-    if( ovp_status == STATUS_PENDING )
-    {
-        ovp->func(ovp);
-        register_async (ovp);
-        ovp_status = ovp->ops->get_status (ovp);
-    }
+    if( ovp_status == STATUS_PENDING ) ovp->func(ovp);
 
-    if( ovp_status != STATUS_PENDING )
-        finish_async(ovp);
+    /* This will destroy all but PENDING requests */
+    register_async (ovp);
 }
 
 
-------------- next part --------------
A hack that adds tracing to async request handlers.

files/file.c:
        some more TRACEs

scheduler/synchro.c:
        Add TRACEs.
        Uses debug channel "thread" (FIXME??)

Only in CVS/wine/: 011a.diff
diff -ruX diffignore MW/wine/files/file.c CVS/wine/files/file.c
--- MW/wine/files/file.c	Fri Jan 11 16:15:28 2002
+++ CVS/wine/files/file.c	Fri Jan 11 16:14:23 2002
@@ -1444,6 +1444,7 @@
 
 static VOID CALLBACK FILE_OverlappedComplete(DWORD status, DWORD count, LPOVERLAPPED ov)
 {
+    TRACE ("status %ld, count %ld, ov %p\n", status, count, ov);
     NtSetEvent(ov->hEvent,NULL);
 }
 
diff -ruX diffignore MW/wine/scheduler/synchro.c CVS/wine/scheduler/synchro.c
--- MW/wine/scheduler/synchro.c	Fri Jan 11 16:15:44 2002
+++ CVS/wine/scheduler/synchro.c	Fri Jan 11 16:18:46 2002
@@ -16,7 +16,9 @@
 #include "thread.h"
 #include "winerror.h"
 #include "wine/server.h"
+#include "debugtools.h"
 
+DEFAULT_DEBUG_CHANNEL(thread);
 
 /***********************************************************************
  *              get_timeout
@@ -46,6 +48,9 @@
     BOOL ret;
     DWORD status = ovp->ops->get_status (ovp);
 
+    TRACE( "ovp %p, status %ld, handle %d, type %d, func %p\n",
+           ovp, status, ovp->handle, ovp->type, ovp->func ); 
+    
     /* STATUS_USER_APC means this is a new request */
     /* STATUS_PENDING means this request is rescheduled (IO incomplete) */
 
@@ -76,6 +81,7 @@
 
     if (ret) ovp->ops->set_status ( ovp, GetLastError() );
 
+    TRACE ("ret %d, status %ld\n", ret, ovp->ops->get_status (ovp));
     if ( ovp->ops->get_status (ovp) != STATUS_PENDING )
         finish_async (ovp);
 
@@ -90,6 +96,8 @@
  */
 void finish_async(async_private *ovp)
 {
+    TRACE ("ovp %p\n", ovp);
+
     /* remove it from the active list */
     if(ovp->prev)
         ovp->prev->next = ovp->next;
@@ -118,7 +126,7 @@
     async_private *ovp = NULL;
     DWORD ovp_status;
 
-    /* fprintf(stderr,"overlapped %p status %x\n",overlapped,status); */
+    TRACE ("asp %p, status %ld\n", asp, status);
 
     for( ovp = NtCurrentTeb()->pending_list; ovp && ovp != asp; ovp = ovp->next );
 
@@ -131,6 +139,8 @@
         ovp->ops->set_status (ovp, status);
     }
     else ovp_status = ovp->ops->get_status (ovp);
+
+    TRACE ("-->found: status %ld\n", ovp_status);
 
     if( ovp_status == STATUS_PENDING ) ovp->func(ovp);
 


More information about the wine-patches mailing list