diff --git a/crypto/engine/engine.h b/crypto/engine/engine.h index a85cfff87bb5827e5e2a6044311f8225b05ef8f6..e129cde70ce52a4de5fdf6b886031b5c3da696fb 100644 --- a/crypto/engine/engine.h +++ b/crypto/engine/engine.h @@ -349,6 +349,9 @@ int ENGINE_set_cmd_defns(ENGINE *e, const ENGINE_CMD_DEFN *defns); /* Copies across all ENGINE methods and pointers. NB: This does *not* change * reference counts however. */ int ENGINE_cpy(ENGINE *dest, const ENGINE *src); +/* Cleans the internal engine structure. This should only be used when the + * application is about to exit. */ +void ENGINE_cleanup(void); /* These return values from within the ENGINE structure. These can be useful * with functional references as well as structural references - it depends diff --git a/crypto/engine/engine_list.c b/crypto/engine/engine_list.c index cc57e658abed91b6d77eab8001838697143a8a24..2ca667e85dbb620ae382d6336526f54175eebf07 100644 --- a/crypto/engine/engine_list.c +++ b/crypto/engine/engine_list.c @@ -376,6 +376,20 @@ int ENGINE_free(ENGINE *e) return 1; } +void ENGINE_cleanup(void) + { + ENGINE *iterator = engine_list_head; + + while(iterator != NULL) + { + ENGINE_remove(iterator); + ENGINE_free(iterator); + iterator = engine_list_head; + } + engine_list_flag = 0; + return; + } + int ENGINE_set_id(ENGINE *e, const char *id) { if(id == NULL)