diff options
author | Peter Hurley <peter@hurleysoftware.com> | 2011-08-05 10:53:52 -0400 |
---|---|---|
committer | Gustavo F. Padovan <padovan@profusion.mobi> | 2011-08-11 18:50:28 -0400 |
commit | 687beaa0d1d937c327e2f97b4b4fa6c23ca70624 (patch) | |
tree | 157353f922d5505df1971ad7c9deeaf34fb05f52 /net | |
parent | ff062ea109217329b88693bc9081da893eb8b71b (diff) |
Bluetooth: cmtp: 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/cmtp/core.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/net/bluetooth/cmtp/core.c b/net/bluetooth/cmtp/core.c index 42cb2f4c0db1..521baa4fe835 100644 --- a/net/bluetooth/cmtp/core.c +++ b/net/bluetooth/cmtp/core.c | |||
@@ -382,16 +382,17 @@ int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock) | |||
382 | 382 | ||
383 | if (!(session->flags & (1 << CMTP_LOOPBACK))) { | 383 | if (!(session->flags & (1 << CMTP_LOOPBACK))) { |
384 | err = cmtp_attach_device(session); | 384 | err = cmtp_attach_device(session); |
385 | if (err < 0) | 385 | if (err < 0) { |
386 | goto detach; | 386 | atomic_inc(&session->terminate); |
387 | wake_up_process(session->task); | ||
388 | up_write(&cmtp_session_sem); | ||
389 | return err; | ||
390 | } | ||
387 | } | 391 | } |
388 | 392 | ||
389 | up_write(&cmtp_session_sem); | 393 | up_write(&cmtp_session_sem); |
390 | return 0; | 394 | return 0; |
391 | 395 | ||
392 | detach: | ||
393 | cmtp_detach_device(session); | ||
394 | |||
395 | unlink: | 396 | unlink: |
396 | __cmtp_unlink_session(session); | 397 | __cmtp_unlink_session(session); |
397 | 398 | ||