With this patch, there is still a problem that lapb_unregister may run concurrently with other LAPB API functions (such as lapb_data_received). This other LAPB API function can get the lapb->lock after lapb->lock is released by lapb_unregister, and continue to do its work. This is not correct. We can fix this problem by adding a new field "bool stop" to "struct lapb_cb" (just like "bool t1timer_stop, t2timer_stop"), and make every API function abort whenever it sees lapb->stop == true after getting the lock. Alternatively we can also require the callers (the LAPB drivers) to never call lapb_unregister concurrently with other LAPB APIs. They should make sure all LAPB API functions are only called after lapb_register ends and before lapb_unregister starts. This is a reasonable requirement, because if they don't follow this requirement, even if we do the fix in the LAPB module (as said above), the LAPB driver will still get the "LAPB_BADTOKEN" error from the LAPB module. This is not desirable and I think LAPB drivers should avoid this from happening. So I think this problem may not need to be fixed here in the LAPB module because the LAPB drivers should deal with this problem anyway. Please feel free to share your comment. Thanks!