Each 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(). if (!(CheckIO(TimerIO))) { AbortIO(TimerIO); /* Ask device to abort any pending requests */ } WaitIO(TimerIO); /* Clean up */ CloseDevice((struct IORequest *)TimerIO); /* Close Timer device */