diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2020-12-04 22:58:28 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2020-12-04 23:11:27 +0200 |
commit | 1f75cee8eefea039697affb0ab43e3ccb5357861 (patch) | |
tree | 57bc463575ac0bcec06ac27ebde2f72d9938b95a /src/pies.h | |
parent | 5196a3a826938c08dc890db63c06ee6a6bc61953 (diff) | |
download | pies-1f75cee8eefea039697affb0ab43e3ccb5357861.tar.gz pies-1f75cee8eefea039697affb0ab43e3ccb5357861.tar.bz2 |
Rewrite stdout/stderr redirection
Instead of spawning a subprocess for each redirection, read the
output directly from pipe and send it to syslog using an asynchronous
syslog implementation.
* src/syslog.c: New file.
* src/pies_syslog.h: New file.
* src/Makefile.am: Add syslog.c and pies_syslog.h
* src/comp.c (component_create): Use pies_log_facility.
* src/ctl.c (auth_prog)
(prog_serialize): Remove TYPE_REDIRECTOR case
* src/diag.c (syslog_printer): Use pies_vsyslog.
(syslog_open): Use pies_syslog_open.
(syslog_close): Use pies_syslog_close.
(diag_setup): Use pies_syslog_open.
* src/pies.c (log_facility, log_tag): Remove globals. Use
pies_log_facility and pies_log_tag instead.
New configuration statement syslog.dev
* src/pies.h: Include pies_syslog.h
(register_socket,register_program_socket): Additional argument: free_data.
* src/prog.h (TYPE_REDIRECTOR): Remove.
(prog.v.p.redir): Change data type.
(prog.v.r): Remove.
* src/progman.c (prog_tag)
(destroy_prog)
(progman_cleanup): Remove TYPE_REDIRECTOR case
(prog_stop_redirectors): Deregister fds
(redir_tag,register_redir)
(update_redir): Remove.
(open_redirector): Rewrite. Set up direct reader from the stream,
instead of spawning a subprocess.
(prog_start): Change open_redirector actual arguments.
* src/socket.c (sockinst): New member: free_data.
(register_socket): Initialize the free_data member.
(register_program_socket): Likewise.
Diffstat (limited to 'src/pies.h')
-rw-r--r-- | src/pies.h | 9 |
1 files changed, 5 insertions, 4 deletions
@@ -58,6 +58,7 @@ #include "libpies.h" #include "envop.h" #include "grecs/json.h" +#include "pies_syslog.h" #define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0])) @@ -296,8 +297,6 @@ enum pies_action { }; extern char *instance; -extern char *log_tag; -extern int log_facility; extern unsigned long shutdown_timeout; extern struct component default_component; extern pies_acl_t pies_acl; @@ -473,11 +472,13 @@ void *register_socket (int fd, socket_handler_t rd, socket_handler_t wr, socket_handler_t ex, - void *data); + void *data, + void (*free_data)(void*)); void deregister_socket (int fd); void update_socket (int fd, int evt, socket_handler_t f); -int register_program_socket (int socktype, int fd, void *data); +int register_program_socket (int socktype, int fd, void *data, + void (*free_data)(void*)); int pass_fd (const char *socket, int fd, unsigned time_out); int create_socket (struct pies_url *url, int socket_type, const char *user, mode_t umask); |