The disconnect routine counts the completed_receivers/spare_senders list
to see if the completion handler has finished.  It then kills the tasklet.
However the tasklet was being scheduled after adding to the lists, creating
a micro race.  So schedule the tasklet before adding to the list.


 speedtouch.c |    6 ++----
 1 files changed, 2 insertions(+), 4 deletions(-)


diff -Nru a/drivers/usb/misc/speedtouch.c b/drivers/usb/misc/speedtouch.c
--- a/drivers/usb/misc/speedtouch.c     Sat Feb  8 17:53:40 2003
+++ b/drivers/usb/misc/speedtouch.c     Sat Feb  8 17:53:40 2003
@@ -334,12 +334,11 @@
                return;
        }
 
+       tasklet_schedule (&instance->receive_tasklet);
        /* may not be in_interrupt() */
        spin_lock_irqsave (&instance->completed_receivers_lock, flags);
        list_add_tail (&rcv->list, &instance->completed_receivers);
        spin_unlock_irqrestore (&instance->completed_receivers_lock, flags);
-       PDEBUG ("udsl_complete_receive: scheduling tasklet\n");
-       tasklet_schedule (&instance->receive_tasklet);
 }
 
 static void udsl_process_receive (unsigned long data)
@@ -497,13 +496,12 @@
                return;
        }
 
+       tasklet_schedule (&instance->send_tasklet);
        /* may not be in_interrupt() */
        spin_lock_irqsave (&instance->send_lock, flags);
        list_add (&snd->list, &instance->spare_senders);
        list_add (&snd->buffer->list, &instance->spare_buffers);
        spin_unlock_irqrestore (&instance->send_lock, flags);
-       PDEBUG ("udsl_complete_send: scheduling tasklet\n");
-       tasklet_schedule (&instance->send_tasklet);
 }
 
 static void udsl_process_send (unsigned long data)



-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to