==== linux-2.6.22/net/bluetooth/hidp/core.c - linux/net/bluetooth/hidp/core.c ==== @@ -46,10 +46,10 @@ #include "hidp.h" -#ifndef CONFIG_BT_HIDP_DEBUG -#undef BT_DBG -#define BT_DBG(D...) -#endif +//#ifndef CONFIG_BT_HIDP_DEBUG +//#undef BT_DBG +//#define BT_DBG(D...) +//#endif #define VERSION "1.2" @@ -246,7 +246,7 @@ { struct sk_buff *skb; - BT_DBG("session %p hid %p data %p size %d", session, device, data, size); + BT_DBG("session %p data %p size %d", session, data, size); if (!(skb = alloc_skb(size + 1, GFP_ATOMIC))) { BT_ERR("Can't allocate memory for new frame"); @@ -379,6 +379,7 @@ /* Kill session thread */ atomic_inc(&session->terminate); + hidp_schedule(session); break; case HIDP_CTRL_HARD_RESET: @@ -571,8 +572,11 @@ hidp_process_transmit(session); + BT_DBG("session %p - loop before schedule", session); schedule(); + BT_DBG("session %p - loop after schedule", session); } + BT_DBG("session %p - loop exit", session); set_current_state(TASK_RUNNING); remove_wait_queue(intr_sk->sk_sleep, &intr_wait); remove_wait_queue(ctrl_sk->sk_sleep, &ctrl_wait); @@ -582,27 +586,38 @@ hidp_del_timer(session); if (session->input) { + BT_DBG("session %p - input_unregister_device", session); input_unregister_device(session->input); session->input = NULL; } if (session->hid) { - if (session->hid->claimed & HID_CLAIMED_INPUT) + BT_DBG("session %p - hid", session); + if (session->hid->claimed & HID_CLAIMED_INPUT) { + BT_DBG("session %p - hidinput_disconnect", session); hidinput_disconnect(session->hid); + } + BT_DBG("session %p - before hid_free_device", session); hid_free_device(session->hid); + BT_DBG("session %p - after hid_free_device", session); } + BT_DBG("session %p - fput ", session); fput(session->intr_sock->file); + BT_DBG("session %p - %d", session, ctrl_sk->sk_state); wait_event_timeout(*(ctrl_sk->sk_sleep), (ctrl_sk->sk_state == BT_CLOSED), msecs_to_jiffies(500)); + BT_DBG("session %p - %d", session, ctrl_sk->sk_state); fput(session->ctrl_sock->file); + BT_DBG("session %p - __hidp_unlink_session", session); __hidp_unlink_session(session); up_write(&hidp_session_sem); + BT_DBG("session %p - exit", session); kfree(session); return 0; }