The error is still there in 6-Stable too.
There is no src/usr.sbin/usbd/usbd.c in current.
I don't know the code, & too tired & busy to fix this,
Someone else here able to fix it & post a patch ?
If not, Atom Smasher <atom@smasher.org> please use dmesg

send-pr to report this identified bug.

This patch was originally for 6.1-RELEASE

It doesnt apply on 7.0-BETA2 as no usbd.c

*** 6.2-RELEASE/src/usr.sbin/usbd/usbd.c	Wed Apr 18 09:51:29 2007
--- new-generic/src/usr.sbin/usbd/usbd.c	Wed Apr 18 10:55:32 2007
***************
*** 879,886 ****
--- 879,891 ----
  
  		devinfo = &events.u.ue_device;
  		for (i = 0; i < USB_MAX_DEVNAMES; i++) {
+ printf("  \n%s %d JHS1\n", __FILE__, __LINE__ );
  			if (devinfo->udi_devnames[i][0] == '\0')
  				break;
+ 				/* This break is a problem it prevents
+ 				   USB_EVENT_IS_DETACH being run at JHS3
+ 				*/
+ printf("  \n%s %d JHS2\n", __FILE__, __LINE__ );
  
  			memcpy(&the_event, &events, sizeof(the_event));
  			the_devinfo = &the_event.u.ue_device;
***************
*** 925,930 ****
--- 930,936 ----
  				if (USB_EVENT_IS_ATTACH(the_event.ue_type) &&
  					action_match.action->attach) 
  					execute_command(action_match.action->attach);
+ printf("  \n%s %d JHS3\n", __FILE__, __LINE__ );
  				if (USB_EVENT_IS_DETACH(the_event.ue_type) &&
  					action_match.action->detach)
  					execute_command(action_match.action->detach);
