diff options
author | Peter Hurley <peter@hurleysoftware.com> | 2011-08-05 10:51:26 -0400 |
---|---|---|
committer | Gustavo F. Padovan <padovan@profusion.mobi> | 2011-08-11 18:50:28 -0400 |
commit | e9d5cb541b22aa651edc29990092ec5f8174cd39 (patch) | |
tree | 9a58b39ec75a59c5c1442548afd9ee91081db9b2 /net | |
parent | 7176522cdca1f0b78a1434b41761f0334511822a (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.c | 14 |
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 | ||
1062 | err_add_device: | ||
1063 | hid_destroy_device(session->hid); | ||
1064 | session->hid = NULL; | ||
1065 | atomic_inc(&session->terminate); | ||
1066 | wake_up_process(session->task); | ||
1067 | |||
1068 | unlink: | 1066 | unlink: |
1069 | hidp_del_timer(session); | 1067 | hidp_del_timer(session); |
1070 | 1068 | ||