mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-07-13 18:47:44 +00:00
freetdm: return error when dlclose fails
This commit is contained in:
parent
a611a7e944
commit
f04bff40fa
@ -27,11 +27,12 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
FT_DECLARE(void) ftdm_dso_destroy(ftdm_dso_lib_t *lib) {
|
FT_DECLARE(ftdm_status_t) ftdm_dso_destroy(ftdm_dso_lib_t *lib) {
|
||||||
if (lib && *lib) {
|
if (lib && *lib) {
|
||||||
FreeLibrary(*lib);
|
FreeLibrary(*lib);
|
||||||
*lib = NULL;
|
*lib = NULL;
|
||||||
}
|
}
|
||||||
|
return FTDM_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
FT_DECLARE(ftdm_dso_lib_t) ftdm_dso_open(const char *path, char **err) {
|
FT_DECLARE(ftdm_dso_lib_t) ftdm_dso_open(const char *path, char **err) {
|
||||||
@ -78,11 +79,20 @@ FT_DECLARE(void*) ftdm_dso_func_sym(ftdm_dso_lib_t lib, const char *sym, char **
|
|||||||
|
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
|
|
||||||
FT_DECLARE(void) ftdm_dso_destroy(ftdm_dso_lib_t *lib) {
|
FT_DECLARE(ftdm_status_t) ftdm_dso_destroy(ftdm_dso_lib_t *lib) {
|
||||||
|
int rc;
|
||||||
if (lib && *lib) {
|
if (lib && *lib) {
|
||||||
dlclose(*lib);
|
rc = dlclose(*lib);
|
||||||
*lib = NULL;
|
if (rc) {
|
||||||
|
ftdm_log(FTDM_LOG_ERROR, "Failed to close lib %p: %s\n", *lib, dlerror());
|
||||||
|
return FTDM_FAIL;
|
||||||
}
|
}
|
||||||
|
ftdm_log(FTDM_LOG_DEBUG, "lib %p was closed with success\n", *lib);
|
||||||
|
*lib = NULL;
|
||||||
|
return FTDM_SUCCESS;
|
||||||
|
}
|
||||||
|
ftdm_log(FTDM_LOG_ERROR, "Invalid pointer provided to ftdm_dso_destroy\n");
|
||||||
|
return FTDM_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
FT_DECLARE(ftdm_dso_lib_t) ftdm_dso_open(const char *path, char **err) {
|
FT_DECLARE(ftdm_dso_lib_t) ftdm_dso_open(const char *path, char **err) {
|
||||||
@ -93,7 +103,7 @@ FT_DECLARE(ftdm_dso_lib_t) ftdm_dso_open(const char *path, char **err) {
|
|||||||
return lib;
|
return lib;
|
||||||
}
|
}
|
||||||
|
|
||||||
FT_DECLARE(void*) ftdm_dso_func_sym(ftdm_dso_lib_t lib, const char *sym, char **err) {
|
FT_DECLARE(void *) ftdm_dso_func_sym(ftdm_dso_lib_t lib, const char *sym, char **err) {
|
||||||
void *func = dlsym(lib, sym);
|
void *func = dlsym(lib, sym);
|
||||||
if (!func) {
|
if (!func) {
|
||||||
*err = ftdm_strdup(dlerror());
|
*err = ftdm_strdup(dlerror());
|
||||||
|
@ -2142,12 +2142,13 @@ static FIO_SIG_UNLOAD_FUNCTION(ftdm_sangoma_boost_destroy)
|
|||||||
const void *key = NULL;
|
const void *key = NULL;
|
||||||
void *val = NULL;
|
void *val = NULL;
|
||||||
ftdm_dso_lib_t lib;
|
ftdm_dso_lib_t lib;
|
||||||
|
ftdm_log(FTDM_LOG_DEBUG, "Destroying sangoma boost module\n");
|
||||||
for (i = hashtable_first(g_boost_modules_hash); i; i = hashtable_next(i)) {
|
for (i = hashtable_first(g_boost_modules_hash); i; i = hashtable_next(i)) {
|
||||||
hashtable_this(i, &key, NULL, &val);
|
hashtable_this(i, &key, NULL, &val);
|
||||||
if (key && val) {
|
if (key && val) {
|
||||||
sigmod = val;
|
sigmod = val;
|
||||||
lib = sigmod->pvt;
|
lib = sigmod->pvt;
|
||||||
|
ftdm_log(FTDM_LOG_DEBUG, "destroying sigmod %s\n", sigmod->name);
|
||||||
ftdm_dso_destroy(&lib);
|
ftdm_dso_destroy(&lib);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "freetdm.h"
|
||||||
|
|
||||||
#ifndef _FTDM_DSO_H
|
#ifndef _FTDM_DSO_H
|
||||||
#define _FTDM_DSO_H
|
#define _FTDM_DSO_H
|
||||||
@ -28,7 +29,7 @@ extern "C" {
|
|||||||
typedef void (*ftdm_func_ptr_t) (void);
|
typedef void (*ftdm_func_ptr_t) (void);
|
||||||
typedef void * ftdm_dso_lib_t;
|
typedef void * ftdm_dso_lib_t;
|
||||||
|
|
||||||
FT_DECLARE(void) ftdm_dso_destroy(ftdm_dso_lib_t *lib);
|
FT_DECLARE(ftdm_status_t) ftdm_dso_destroy(ftdm_dso_lib_t *lib);
|
||||||
FT_DECLARE(ftdm_dso_lib_t) ftdm_dso_open(const char *path, char **err);
|
FT_DECLARE(ftdm_dso_lib_t) ftdm_dso_open(const char *path, char **err);
|
||||||
FT_DECLARE(void *) ftdm_dso_func_sym(ftdm_dso_lib_t lib, const char *sym, char **err);
|
FT_DECLARE(void *) ftdm_dso_func_sym(ftdm_dso_lib_t lib, const char *sym, char **err);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user