diff options
Diffstat (limited to 'src/spawn/spawn.h')
-rw-r--r-- | src/spawn/spawn.h | 109 |
1 files changed, 0 insertions, 109 deletions
diff --git a/src/spawn/spawn.h b/src/spawn/spawn.h deleted file mode 100644 index 6e9e51ef0..000000000 --- a/src/spawn/spawn.h +++ /dev/null @@ -1,109 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -#ifndef NETDATA_SPAWN_H -#define NETDATA_SPAWN_H 1 - -#include "daemon/common.h" - -#define SPAWN_SERVER_COMMAND_LINE_ARGUMENT "--special-spawn-server" - -typedef enum spawn_protocol { - SPAWN_PROT_EXEC_CMD = 0, - SPAWN_PROT_SPAWN_RESULT, - SPAWN_PROT_CMD_EXIT_STATUS -} spawn_prot_t; - -struct spawn_prot_exec_cmd { - uint16_t command_length; - char command_to_run[]; -}; - -struct spawn_prot_spawn_result { - pid_t exec_pid; /* 0 if failed to spawn */ - time_t exec_run_timestamp; /* time of successfully spawning the command */ -}; - -struct spawn_prot_cmd_exit_status { - int exec_exit_status; -}; - -struct spawn_prot_header { - spawn_prot_t opcode; - void *handle; -}; - -#undef SPAWN_DEBUG /* define to enable debug prints */ - -#define SPAWN_MAX_OUTSTANDING (32768) - -#define SPAWN_CMD_PROCESSED 0x00000001 -#define SPAWN_CMD_IN_PROGRESS 0x00000002 -#define SPAWN_CMD_FAILED_TO_SPAWN 0x00000004 -#define SPAWN_CMD_DONE 0x00000008 - -struct spawn_cmd_info { - avl_t avl; - - /* concurrency control per command */ - uv_mutex_t mutex; - uv_cond_t cond; /* users block here until command has finished */ - - uint64_t serial; - char *command_to_run; - int exit_status; - pid_t pid; - unsigned long flags; - time_t exec_run_timestamp; /* time of successfully spawning the command */ -}; - -/* spawn command queue */ -struct spawn_queue { - avl_tree_type cmd_tree; - - /* concurrency control of command queue */ - uv_mutex_t mutex; - uv_cond_t cond; - - volatile unsigned size; - uint64_t latest_serial; -}; - -struct write_context { - uv_write_t write_req; - struct spawn_prot_header header; - struct spawn_prot_cmd_exit_status exit_status; - struct spawn_prot_spawn_result spawn_result; - struct spawn_prot_exec_cmd payload; -}; - -extern int spawn_thread_error; -extern int spawn_thread_shutdown; -extern uv_async_t spawn_async; - -void spawn_init(void); -void spawn_server(void); -void spawn_client(void *arg); -void destroy_spawn_cmd(struct spawn_cmd_info *cmdinfo); -uint64_t spawn_enq_cmd(const char *command_to_run); -void spawn_wait_cmd(uint64_t serial, int *exit_status, time_t *exec_run_timestamp); -void spawn_deq_cmd(struct spawn_cmd_info *cmdinfo); -struct spawn_cmd_info *spawn_get_unprocessed_cmd(void); -int create_spawn_server(uv_loop_t *loop, uv_pipe_t *spawn_channel, uv_process_t *process); - -/* - * Copies from the source buffer to the protocol buffer. It advances the source buffer by the amount copied. It - * subtracts the amount copied from the source length. - */ -static inline void copy_to_prot_buffer(char *prot_buffer, unsigned *prot_buffer_len, unsigned max_to_copy, - char **source, unsigned *source_len) -{ - unsigned to_copy; - - to_copy = MIN(max_to_copy, *source_len); - memcpy(prot_buffer + *prot_buffer_len, *source, to_copy); - *prot_buffer_len += to_copy; - *source += to_copy; - *source_len -= to_copy; -} - -#endif //NETDATA_SPAWN_H |