aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorPeter Hurley <peter@hurleysoftware.com>2011-08-05 10:51:26 -0400
committerGustavo F. Padovan <padovan@profusion.mobi>2011-08-11 18:50:28 -0400
commite9d5cb541b22aa651edc29990092ec5f8174cd39 (patch)
tree9a58b39ec75a59c5c1442548afd9ee91081db9b2 /net
parent7176522cdca1f0b78a1434b41761f0334511822a (diff)
Bluetooth: hidp: Fix session cleanup on failed conn add
Once the session thread is running, cleanup must be handled by the session thread only. Signed-off-by: Peter Hurley <peter@hurleysoftware.com> Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
Diffstat (limited to 'net')
-rw-r--r--net/bluetooth/hidp/core.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
index 43b4c2deb7cc..7e19a012970e 100644
--- a/net/bluetooth/hidp/core.c
+++ b/net/bluetooth/hidp/core.c
@@ -1044,8 +1044,12 @@ int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock,
1044 } 1044 }
1045 1045
1046 err = hid_add_device(session->hid); 1046 err = hid_add_device(session->hid);
1047 if (err < 0) 1047 if (err < 0) {
1048 goto err_add_device; 1048 atomic_inc(&session->terminate);
1049 wake_up_process(session->task);
1050 up_write(&hidp_session_sem);
1051 return err;
1052 }
1049 1053
1050 if (session->input) { 1054 if (session->input) {
1051 hidp_send_ctrl_message(session, 1055 hidp_send_ctrl_message(session,
@@ -1059,12 +1063,6 @@ int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock,
1059 up_write(&hidp_session_sem); 1063 up_write(&hidp_session_sem);
1060 return 0; 1064 return 0;
1061 1065
1062err_add_device:
1063 hid_destroy_device(session->hid);
1064 session->hid = NULL;
1065 atomic_inc(&session->terminate);
1066 wake_up_process(session->task);
1067
1068unlink: 1066unlink:
1069 hidp_del_timer(session); 1067 hidp_del_timer(session);
1070 1068