X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=include%2Fbabeltrace%2Fplugin%2Fplugin-internal.h;h=fbb91de6dbabd44d7ded5816d801510c2e531fed;hb=33bceaf8b418f6f3e63371e4ba36ed552e8fe2df;hp=83654c17d54e436e14b71c4f43d02d64b168f584;hpb=3f29fd91d07bad647861ccda49d1515f6f927a0a;p=babeltrace.git diff --git a/include/babeltrace/plugin/plugin-internal.h b/include/babeltrace/plugin/plugin-internal.h index 83654c17..fbb91de6 100644 --- a/include/babeltrace/plugin/plugin-internal.h +++ b/include/babeltrace/plugin/plugin-internal.h @@ -2,7 +2,7 @@ #define BABELTRACE_PLUGIN_INTERNAL_H /* - * BabelTrace - Plug-in internal + * BabelTrace - Plug-in Internal * * Copyright 2015 Jérémie Galarneau * @@ -28,25 +28,37 @@ */ #include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct bt_notification; +#include +#include +#include +#include +#include +/** + * Plug-ins are owned by bt_component_factory and the bt_component_class-es + * it provides. This means that its lifetime bound by either the component + * factory's, or the concrete components' lifetime which may be in use and which + * have hold a reference to their bt_component_class which, in turn, have a + * reference to their plugin. + * + * This ensures that a plugin's library is not closed while it is being used + * even if the bt_component_factory, which created its components, is destroyed. + */ struct bt_plugin { - GString *name; - enum bt_plugin_type type; - - /* Plug-in implementation callbacks */ - bt_plugin_destroy_cb destroy; - bt_plugin_set_error_stream_cb set_error_stream; + struct bt_object base; + const char *name; + const char *author; + const char *license; + bt_plugin_init_func init; + bt_plugin_exit_func exit; + GModule *module; }; -#ifdef __cplusplus -} -#endif +BT_HIDDEN +struct bt_plugin *bt_plugin_create(GModule *module); + +BT_HIDDEN +enum bt_component_status bt_plugin_register_component_classes( + struct bt_plugin *plugin, struct bt_component_factory *factory); #endif /* BABELTRACE_PLUGIN_INTERNAL_H */