Skip to content
Snippets Groups Projects
Commit 68a2aa5e authored by dmitriy.gerasimov's avatar dmitriy.gerasimov
Browse files

Merge branch 'features-2954' into 'master'

Features 2954

See merge request cellframe/libdap-chain-plugins-python!3
parents 71f4262d 1c2d7990
No related branches found
No related tags found
1 merge request!3Features 2954
...@@ -31,6 +31,7 @@ dap_chain_plugin_list_module_t* dap_chain_plugins_list_get(); ...@@ -31,6 +31,7 @@ dap_chain_plugin_list_module_t* dap_chain_plugins_list_get();
bool dap_chain_plugins_list_check_load_plugins(dap_chain_plugins_list_char_t *list); bool dap_chain_plugins_list_check_load_plugins(dap_chain_plugins_list_char_t *list);
void dap_chain_plugins_list_add(PyObject *module, const char *name); void dap_chain_plugins_list_add(PyObject *module, const char *name);
void dap_chain_plugins_list_name_del(const char *name);
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
......
Subproject commit 873d35d455186ff621a1515e1f1235e4c194843a Subproject commit 10d968ce8ea69a7a2e05750a8ec0ef5ebba1ceb9
...@@ -36,9 +36,6 @@ int dap_chain_plugins_init(dap_config_t *config){ ...@@ -36,9 +36,6 @@ int dap_chain_plugins_init(dap_config_t *config){
} }
return 0; return 0;
} }
void dap_chain_plugins_deinit(){
Py_Finalize();
}
void dap_chain_plugins_loading(){ void dap_chain_plugins_loading(){
log_it(L_NOTICE, "Loading plugins"); log_it(L_NOTICE, "Loading plugins");
...@@ -123,3 +120,23 @@ void dap_chain_plugins_load_plugin(const char *dir_path, const char *name){ ...@@ -123,3 +120,23 @@ void dap_chain_plugins_load_plugin(const char *dir_path, const char *name){
} }
} }
void dap_chain_plugins_deinit(){
log_it(L_NOTICE, "Deinit python plugins");
dap_chain_plugin_list_module_t *plugins = dap_chain_plugins_list_get();
dap_chain_plugin_list_module_t *plugin;
dap_chain_plugin_list_module_t *tmp;
PyObject *res_int = NULL;
LL_FOREACH_SAFE(plugins, plugin, tmp){
PyObject *func_deinit = PyObject_GetAttrString(plugin->obj_module, "deinit");
if (func_deinit != NULL || PyCallable_Check(func_deinit)){
res_int = PyEval_CallObject(func_deinit, NULL);
} else {
log_it(L_WARNING, "For plugin %s can't callable function deinit", plugin->name);
}
DAP_FREE(plugin->name);
Py_XDECREF(plugin->obj_module);
LL_DELETE(plugins, plugin);
}
Py_Finalize();
}
...@@ -38,3 +38,20 @@ bool dap_chain_plugins_list_check_load_plugins(dap_chain_plugins_list_char_t *li ...@@ -38,3 +38,20 @@ bool dap_chain_plugins_list_check_load_plugins(dap_chain_plugins_list_char_t *li
return true; return true;
} }
void dap_chain_plugins_list_name_del(const char *name){
dap_chain_plugin_list_module_t *plugin;
dap_chain_plugin_list_module_t *tmp;
bool plugin_searcging = false;
LL_FOREACH_SAFE(m_dap_chain_plugins_module_list, plugin, tmp){
if (strcmp(plugin->name, name) == 0){
DAP_FREE(plugin->name);
Py_XDECREF(plugin->obj_module);
LL_DELETE(m_dap_chain_plugins_module_list, plugin);
plugin_searcging = true;
}
}
if (!plugin_searcging){
log_it(L_WARNING, "Can't searching plugins %s for delete", name);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment