diff options
| author | 2019-07-19 02:15:40 +0700 | |
|---|---|---|
| committer | 2019-07-19 02:15:40 +0700 | |
| commit | e87c26ebe58aa9b778a06ebbb94659a1ef304e38 (patch) | |
| tree | 21db81811cde719d7880de919e621add2e370c73 /src/syslog_relay.c | |
| parent | f52584e7310ad9af414cdd22cbfad81d53417c22 (diff) | |
| download | libimobiledevice-e87c26ebe58aa9b778a06ebbb94659a1ef304e38.tar.gz libimobiledevice-e87c26ebe58aa9b778a06ebbb94659a1ef304e38.tar.bz2 | |
syslog_relay: Terminate worker thread before freeing service client to prevent segfault
Diffstat (limited to 'src/syslog_relay.c')
| -rw-r--r-- | src/syslog_relay.c | 9 |
1 files changed, 1 insertions, 8 deletions
diff --git a/src/syslog_relay.c b/src/syslog_relay.c index 0d71392..579908c 100644 --- a/src/syslog_relay.c +++ b/src/syslog_relay.c | |||
| @@ -104,15 +104,8 @@ LIBIMOBILEDEVICE_API syslog_relay_error_t syslog_relay_client_free(syslog_relay_ | |||
| 104 | { | 104 | { |
| 105 | if (!client) | 105 | if (!client) |
| 106 | return SYSLOG_RELAY_E_INVALID_ARG; | 106 | return SYSLOG_RELAY_E_INVALID_ARG; |
| 107 | 107 | syslog_relay_stop_capture(client); | |
| 108 | syslog_relay_error_t err = syslog_relay_error(service_client_free(client->parent)); | 108 | syslog_relay_error_t err = syslog_relay_error(service_client_free(client->parent)); |
| 109 | client->parent = NULL; | ||
| 110 | if (client->worker) { | ||
| 111 | debug_info("Joining syslog capture callback worker thread"); | ||
| 112 | thread_join(client->worker); | ||
| 113 | thread_free(client->worker); | ||
| 114 | client->worker = THREAD_T_NULL; | ||
| 115 | } | ||
| 116 | free(client); | 109 | free(client); |
| 117 | 110 | ||
| 118 | return err; | 111 | return err; |
