ZyklonB: struct plugin_data -> plugin
This commit is contained in:
parent
241acd1ac7
commit
634841ea18
52
zyklonb.c
52
zyklonb.c
@ -57,9 +57,9 @@ static struct config_item g_config_table[] =
|
||||
|
||||
// --- Application data --------------------------------------------------------
|
||||
|
||||
struct plugin_data
|
||||
struct plugin
|
||||
{
|
||||
LIST_HEADER (struct plugin_data)
|
||||
LIST_HEADER (struct plugin)
|
||||
struct bot_context *ctx; ///< Parent context
|
||||
|
||||
char *name; ///< Plugin identifier
|
||||
@ -83,7 +83,7 @@ struct plugin_data
|
||||
};
|
||||
|
||||
static void
|
||||
plugin_data_init (struct plugin_data *self)
|
||||
plugin_init (struct plugin *self)
|
||||
{
|
||||
memset (self, 0, sizeof *self);
|
||||
|
||||
@ -97,7 +97,7 @@ plugin_data_init (struct plugin_data *self)
|
||||
}
|
||||
|
||||
static void
|
||||
plugin_data_free (struct plugin_data *self)
|
||||
plugin_free (struct plugin *self)
|
||||
{
|
||||
soft_assert (self->pid == -1);
|
||||
free (self->name);
|
||||
@ -114,6 +114,8 @@ plugin_data_free (struct plugin_data *self)
|
||||
str_free (&self->queued_output);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
struct bot_context
|
||||
{
|
||||
struct str_map config; ///< User configuration
|
||||
@ -134,7 +136,7 @@ struct bot_context
|
||||
SSL_CTX *ssl_ctx; ///< SSL context
|
||||
SSL *ssl; ///< SSL connection
|
||||
|
||||
struct plugin_data *plugins; ///< Linked list of plugins
|
||||
struct plugin *plugins; ///< Linked list of plugins
|
||||
struct str_map plugins_by_name; ///< Indexes @em plugins by their name
|
||||
|
||||
struct poller poller; ///< Manages polled descriptors
|
||||
@ -190,11 +192,11 @@ bot_context_free (struct bot_context *self)
|
||||
str_free (&self->read_buffer);
|
||||
|
||||
// TODO: terminate the plugins properly before this is called
|
||||
struct plugin_data *link, *tmp;
|
||||
struct plugin *link, *tmp;
|
||||
for (link = self->plugins; link; link = tmp)
|
||||
{
|
||||
tmp = link->next;
|
||||
plugin_data_free (link);
|
||||
plugin_free (link);
|
||||
free (link);
|
||||
}
|
||||
|
||||
@ -230,7 +232,7 @@ try_finish_quit (struct bot_context *ctx)
|
||||
ctx->polling = false;
|
||||
}
|
||||
|
||||
static bool plugin_zombify (struct plugin_data *);
|
||||
static bool plugin_zombify (struct plugin *);
|
||||
|
||||
static void
|
||||
initiate_quit (struct bot_context *ctx)
|
||||
@ -238,7 +240,7 @@ initiate_quit (struct bot_context *ctx)
|
||||
// Initiate bringing down of the two things that block our shutdown:
|
||||
// a/ the IRC socket, b/ our child processes:
|
||||
|
||||
for (struct plugin_data *plugin = ctx->plugins;
|
||||
for (struct plugin *plugin = ctx->plugins;
|
||||
plugin; plugin = plugin->next)
|
||||
plugin_zombify (plugin);
|
||||
if (ctx->irc_fd != -1)
|
||||
@ -721,10 +723,10 @@ setup_recovery_handler (struct bot_context *ctx, struct error **e)
|
||||
/// The name of the special IRC command for interprocess communication
|
||||
static const char *plugin_ipc_command = "ZYKLONB";
|
||||
|
||||
static struct plugin_data *
|
||||
static struct plugin *
|
||||
plugin_find_by_pid (struct bot_context *ctx, pid_t pid)
|
||||
{
|
||||
struct plugin_data *iter;
|
||||
struct plugin *iter;
|
||||
for (iter = ctx->plugins; iter; iter = iter->next)
|
||||
if (iter->pid == pid)
|
||||
return iter;
|
||||
@ -732,7 +734,7 @@ plugin_find_by_pid (struct bot_context *ctx, pid_t pid)
|
||||
}
|
||||
|
||||
static bool
|
||||
plugin_zombify (struct plugin_data *plugin)
|
||||
plugin_zombify (struct plugin *plugin)
|
||||
{
|
||||
if (plugin->is_zombie)
|
||||
return false;
|
||||
@ -760,7 +762,7 @@ plugin_zombify (struct plugin_data *plugin)
|
||||
}
|
||||
|
||||
static void
|
||||
on_plugin_writable (const struct pollfd *fd, struct plugin_data *plugin)
|
||||
on_plugin_writable (const struct pollfd *fd, struct plugin *plugin)
|
||||
{
|
||||
struct str *buf = &plugin->write_buffer;
|
||||
size_t written_total = 0;
|
||||
@ -807,7 +809,7 @@ on_plugin_writable (const struct pollfd *fd, struct plugin_data *plugin)
|
||||
}
|
||||
|
||||
static void
|
||||
plugin_queue_write (struct plugin_data *plugin)
|
||||
plugin_queue_write (struct plugin *plugin)
|
||||
{
|
||||
if (plugin->is_zombie)
|
||||
return;
|
||||
@ -826,11 +828,11 @@ plugin_queue_write (struct plugin_data *plugin)
|
||||
}
|
||||
|
||||
static void
|
||||
plugin_send (struct plugin_data *plugin, const char *format, ...)
|
||||
plugin_send (struct plugin *plugin, const char *format, ...)
|
||||
ATTRIBUTE_PRINTF (2, 3);
|
||||
|
||||
static void
|
||||
plugin_send (struct plugin_data *plugin, const char *format, ...)
|
||||
plugin_send (struct plugin *plugin, const char *format, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
@ -855,7 +857,7 @@ static void
|
||||
plugin_process_message (const struct irc_message *msg,
|
||||
const char *raw, void *user_data)
|
||||
{
|
||||
struct plugin_data *plugin = user_data;
|
||||
struct plugin *plugin = user_data;
|
||||
struct bot_context *ctx = plugin->ctx;
|
||||
|
||||
if (g_debug_mode)
|
||||
@ -926,7 +928,7 @@ plugin_process_message (const struct irc_message *msg,
|
||||
}
|
||||
|
||||
static void
|
||||
on_plugin_readable (const struct pollfd *fd, struct plugin_data *plugin)
|
||||
on_plugin_readable (const struct pollfd *fd, struct plugin *plugin)
|
||||
{
|
||||
if (fd->revents & ~(POLLIN | POLLHUP | POLLERR))
|
||||
print_debug ("fd %d: unexpected revents: %d", fd->fd, fd->revents);
|
||||
@ -1076,8 +1078,8 @@ plugin_load (struct bot_context *ctx, const char *name, struct error **e)
|
||||
set_blocking (stdout_pipe[0], false);
|
||||
set_blocking (stdin_pipe[1], false);
|
||||
|
||||
struct plugin_data *plugin = xmalloc (sizeof *plugin);
|
||||
plugin_data_init (plugin);
|
||||
struct plugin *plugin = xmalloc (sizeof *plugin);
|
||||
plugin_init (plugin);
|
||||
plugin->ctx = ctx;
|
||||
plugin->pid = pid;
|
||||
plugin->name = xstrdup (name);
|
||||
@ -1111,7 +1113,7 @@ fail_1:
|
||||
static bool
|
||||
plugin_unload (struct bot_context *ctx, const char *name, struct error **e)
|
||||
{
|
||||
struct plugin_data *plugin = str_map_find (&ctx->plugins_by_name, name);
|
||||
struct plugin *plugin = str_map_find (&ctx->plugins_by_name, name);
|
||||
|
||||
if (!plugin)
|
||||
{
|
||||
@ -1325,7 +1327,7 @@ process_privmsg (struct bot_context *ctx, const struct irc_message *msg)
|
||||
"\x02startup reason:\x0f %s; \x02plugins:\x0f ", reason);
|
||||
size_t zombies = 0;
|
||||
const char *prepend = "";
|
||||
for (struct plugin_data *plugin = ctx->plugins;
|
||||
for (struct plugin *plugin = ctx->plugins;
|
||||
plugin; plugin = plugin->next)
|
||||
{
|
||||
if (plugin->is_zombie)
|
||||
@ -1372,7 +1374,7 @@ irc_forward_message_to_plugins (struct bot_context *ctx, const char *raw)
|
||||
if (!ctx->irc_ready)
|
||||
return;
|
||||
|
||||
for (struct plugin_data *plugin = ctx->plugins;
|
||||
for (struct plugin *plugin = ctx->plugins;
|
||||
plugin; plugin = plugin->next)
|
||||
{
|
||||
if (plugin->is_zombie)
|
||||
@ -1778,7 +1780,7 @@ on_signal_pipe_readable (const struct pollfd *fd, struct bot_context *ctx)
|
||||
if (zombie == 0)
|
||||
break;
|
||||
|
||||
struct plugin_data *plugin = plugin_find_by_pid (ctx, zombie);
|
||||
struct plugin *plugin = plugin_find_by_pid (ctx, zombie);
|
||||
// Something has died but we don't recognize it (re-exec?)
|
||||
if (!soft_assert (plugin != NULL))
|
||||
continue;
|
||||
@ -1814,7 +1816,7 @@ on_signal_pipe_readable (const struct pollfd *fd, struct bot_context *ctx)
|
||||
plugin->read_fd = -1;
|
||||
|
||||
LIST_UNLINK (ctx->plugins, plugin);
|
||||
plugin_data_free (plugin);
|
||||
plugin_free (plugin);
|
||||
free (plugin);
|
||||
|
||||
// Living child processes block us from quitting
|
||||
|
Loading…
Reference in New Issue
Block a user