aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--debian/libwsutil0.symbols1
-rw-r--r--epan/maxmind_db.c3
-rw-r--r--extcap.c5
-rw-r--r--wsutil/ws_pipe.c12
-rw-r--r--wsutil/ws_pipe.h6
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);
diff --git a/extcap.c b/extcap.c
index 7c65267fc9..7b468be5f8 100644
--- a/extcap.c
+++ b/extcap.c
@@ -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.