An OpenDevice() must eventually be matched by a call to CloseDevice(). All I/O requests must be complete before CloseDevice(). If any requests are still pending, abort them with AbortIO() and remove them with WaitIO(). if (!(CheckIO(KeyIO))) { AbortIO(KeyIO); /* Ask device to abort request, if pending */ } WaitIO(KeyIO); /* Wait for abort, then clean up */ CloseDevice(KeyIO);