diff options
author | Stefan Wahren <stefan.wahren@i2se.com> | 2018-03-31 22:09:47 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2018-04-23 15:48:20 +0200 |
commit | a69b41e90aedbfd04dc34d3e0df96143d99ab71b (patch) | |
tree | 3fd1939ec76aa1d72e116a4410e1bbd3c205b65d | |
parent | 8dd60f7dc76db081f1231960bd97c6e82213e5cb (diff) |
staging: vchiq_core: Free kthreads in error case
We need to free the kthreads in error case before leaving
vchiq_init_state() otherwise we leak resources.
Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c index d4f24581986d..7642ced31436 100644 --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_core.c @@ -2562,7 +2562,7 @@ vchiq_init_state(VCHIQ_STATE_T *state, VCHIQ_SLOT_ZERO_T *slot_zero, vchiq_loud_error_header(); vchiq_loud_error("couldn't create thread %s", threadname); vchiq_loud_error_footer(); - return VCHIQ_ERROR; + goto fail_free_handler_thread; } set_user_nice(state->recycle_thread, -19); @@ -2574,7 +2574,7 @@ vchiq_init_state(VCHIQ_STATE_T *state, VCHIQ_SLOT_ZERO_T *slot_zero, vchiq_loud_error_header(); vchiq_loud_error("couldn't create thread %s", threadname); vchiq_loud_error_footer(); - return VCHIQ_ERROR; + goto fail_free_recycle_thread; } set_user_nice(state->sync_thread, -20); @@ -2588,6 +2588,13 @@ vchiq_init_state(VCHIQ_STATE_T *state, VCHIQ_SLOT_ZERO_T *slot_zero, local->initialised = 1; return status; + +fail_free_recycle_thread: + kthread_stop(state->recycle_thread); +fail_free_handler_thread: + kthread_stop(state->slot_handler_thread); + + return VCHIQ_ERROR; } /* Called from application thread when a client or server service is created. */ |