|
@@ -1044,8 +1044,12 @@ int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock,
|
|
|
}
|
|
|
|
|
|
err = hid_add_device(session->hid);
|
|
|
- if (err < 0)
|
|
|
- goto err_add_device;
|
|
|
+ if (err < 0) {
|
|
|
+ atomic_inc(&session->terminate);
|
|
|
+ wake_up_process(session->task);
|
|
|
+ up_write(&hidp_session_sem);
|
|
|
+ return err;
|
|
|
+ }
|
|
|
|
|
|
if (session->input) {
|
|
|
hidp_send_ctrl_message(session,
|
|
@@ -1059,12 +1063,6 @@ int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock,
|
|
|
up_write(&hidp_session_sem);
|
|
|
return 0;
|
|
|
|
|
|
-err_add_device:
|
|
|
- hid_destroy_device(session->hid);
|
|
|
- session->hid = NULL;
|
|
|
- atomic_inc(&session->terminate);
|
|
|
- wake_up_process(session->task);
|
|
|
-
|
|
|
unlink:
|
|
|
hidp_del_timer(session);
|
|
|
|