diff options
-rw-r--r-- | debian/libwsutil0.symbols | 1 | ||||
-rw-r--r-- | epan/maxmind_db.c | 3 | ||||
-rw-r--r-- | extcap.c | 5 | ||||
-rw-r--r-- | wsutil/ws_pipe.c | 12 | ||||
-rw-r--r-- | wsutil/ws_pipe.h | 6 |
5 files changed, 21 insertions, 6 deletions
diff --git a/debian/libwsutil0.symbols b/debian/libwsutil0.symbols index 88464bcc5a..c39531b066 100644 --- a/debian/libwsutil0.symbols +++ b/debian/libwsutil0.symbols @@ -179,6 +179,7 @@ libwsutil.so.0 libwsutil0 #MINVER# ws_inet_pton6@Base 2.1.2 ws_mempbrk_compile@Base 1.99.4 ws_mempbrk_exec@Base 1.99.4 + ws_pipe_close@Base 2.9.0 ws_pipe_data_available@Base 2.5.0 ws_pipe_init@Base 2.5.1 ws_pipe_spawn_async@Base 2.5.1 diff --git a/epan/maxmind_db.c b/epan/maxmind_db.c index a8da604d95..5e8fb1696c 100644 --- a/epan/maxmind_db.c +++ b/epan/maxmind_db.c @@ -282,8 +282,7 @@ static void mmdb_resolve_stop(gboolean lock_mutex) { ws_close(mmdbr_pipe.stdin_fd); fclose(mmdbr_stdout); MMDB_DEBUG("closing pid %d", mmdbr_pipe.pid); - g_spawn_close_pid(mmdbr_pipe.pid); - mmdbr_pipe.pid = WS_INVALID_PID; + ws_pipe_close(&mmdbr_pipe); mmdbr_stdout = NULL; if (lock_mutex) g_mutex_unlock(&mmdbr_pipe_mtx); @@ -1199,10 +1199,7 @@ void extcap_if_cleanup(capture_options *capture_opts, gchar **errormsg) if (interface_opts->extcap_pid != WS_INVALID_PID) { -#ifdef _WIN32 - TerminateProcess(interface_opts->extcap_pid, 0); -#endif - g_spawn_close_pid(interface_opts->extcap_pid); + ws_pipe_close((ws_pipe_t *) interface_opts->extcap_pipedata); interface_opts->extcap_pid = WS_INVALID_PID; g_free(interface_opts->extcap_pipedata); diff --git a/wsutil/ws_pipe.c b/wsutil/ws_pipe.c index 20f5eab072..149d3a4a56 100644 --- a/wsutil/ws_pipe.c +++ b/wsutil/ws_pipe.c @@ -330,6 +330,18 @@ GPid ws_pipe_spawn_async(ws_pipe_t *ws_pipe, GPtrArray *args) return pid; } +void ws_pipe_close(ws_pipe_t * ws_pipe) +{ + if (ws_pipe->pid != WS_INVALID_PID) { +#ifdef _WIN32 + TerminateProcess(ws_pipe->pid, 0); +#else + g_spawn_close_pid(ws_pipe->pid); +#endif + ws_pipe->pid = WS_INVALID_PID; + } +} + #ifdef _WIN32 typedef struct diff --git a/wsutil/ws_pipe.h b/wsutil/ws_pipe.h index bd9fca63a3..57403930d6 100644 --- a/wsutil/ws_pipe.h +++ b/wsutil/ws_pipe.h @@ -73,6 +73,12 @@ static inline gboolean ws_pipe_valid(ws_pipe_t *ws_pipe) */ WS_DLL_PUBLIC GPid ws_pipe_spawn_async (ws_pipe_t * ws_pipe, GPtrArray * args ); +/** + * @brief Stop a process started with ws_pipe_spawn_async + * @param ws_pipe The process PID, stdio descriptors, etc. + */ +WS_DLL_PUBLIC void ws_pipe_close(ws_pipe_t * ws_pipe); + #ifdef _WIN32 /** * @brief Wait for a set of handles using WaitForMultipleObjects. Windows only. |