Rework constructors/destructors

This commit is contained in:
2017-06-22 22:45:25 +02:00
parent 68bc297809
commit a2611cdc3c
3 changed files with 36 additions and 61 deletions

View File

@@ -83,11 +83,10 @@ struct plugin
struct str write_buffer; ///< Output yet to be sent out
};
static void
plugin_init (struct plugin *self)
static struct plugin *
plugin_new (void)
{
memset (self, 0, sizeof *self);
struct plugin *self = xcalloc (1, sizeof *self);
self->pid = -1;
self->queued_output = str_make ();
@@ -95,10 +94,11 @@ plugin_init (struct plugin *self)
self->read_buffer = str_make ();
self->write_fd = -1;
self->write_buffer = str_make ();
return self;
}
static void
plugin_free (struct plugin *self)
plugin_destroy (struct plugin *self)
{
soft_assert (self->pid == -1);
free (self->name);
@@ -113,6 +113,8 @@ plugin_free (struct plugin *self)
if (!self->initialized)
str_free (&self->queued_output);
free (self);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@@ -192,13 +194,8 @@ bot_context_free (struct bot_context *self)
str_free (&self->read_buffer);
// TODO: terminate the plugins properly before this is called
struct plugin *link, *tmp;
for (link = self->plugins; link; link = tmp)
{
tmp = link->next;
plugin_free (link);
free (link);
}
LIST_FOR_EACH (struct plugin, link, self->plugins)
plugin_destroy (link);
if (self->irc_fd != -1)
{
@@ -1099,8 +1096,7 @@ plugin_launch (struct bot_context *ctx, const char *name, struct error **e)
xclose (stdin_pipe[0]);
xclose (stdout_pipe[1]);
struct plugin *plugin = xmalloc (sizeof *plugin);
plugin_init (plugin);
struct plugin *plugin = plugin_new ();
plugin->ctx = ctx;
plugin->pid = pid;
plugin->name = xstrdup (name);
@@ -1876,8 +1872,7 @@ on_plugin_death (struct plugin *plugin, int status)
plugin->read_fd = -1;
LIST_UNLINK (ctx->plugins, plugin);
plugin_free (plugin);
free (plugin);
plugin_destroy (plugin);
// Living child processes block us from quitting
try_finish_quit (ctx);