From edc418b22dbbdb266d9b258ddcd1519b68b4f686 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Tue, 18 Dec 2018 20:12:04 +0100 Subject: [PATCH] module: provide a "common" constructor and destructor Also, provide a lock for module to use (to ensure run() and content() doesn't step on each other's toes). --- module.c | 23 +++++++++++++++++++++++ module.h | 6 ++++++ 2 files changed, 29 insertions(+) diff --git a/module.c b/module.c index 7f0a8e6..af66538 100644 --- a/module.c +++ b/module.c @@ -1,6 +1,29 @@ #include "module.h" #include +struct module * +module_common_new(void) +{ + struct module *mod = malloc(sizeof(*mod)); + mod->bar = NULL; + mtx_init(&mod->lock, mtx_plain); + mod->private = NULL; + mod->run = NULL; + mod->destroy = &module_default_destroy; + mod->content = NULL; + mod->begin_expose = &module_default_begin_expose; + mod->expose = &module_default_expose; + mod->end_expose = &module_default_end_expose; + return mod; +} + +void +module_default_destroy(struct module *mod) +{ + mtx_destroy(&mod->lock); + free(mod); +} + struct module_expose_context module_default_begin_expose(const struct module *mod, cairo_t *cr) { diff --git a/module.h b/module.h index 55e4db4..b7a9620 100644 --- a/module.h +++ b/module.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include "particle.h" @@ -21,6 +22,7 @@ struct module_expose_context { struct module { const struct bar *bar; + mtx_t lock; void *private; @@ -35,6 +37,10 @@ struct module { void (*end_expose)(const struct module *mod, struct module_expose_context *ctx); }; +struct module *module_common_new(void); + +void module_default_destroy(struct module *mod); + struct module_expose_context module_default_begin_expose( const struct module *mod, cairo_t *cr);