Diff
Modified: freeswitch/trunk/libs/freetdm/src/ftdm_dso.c (17522 => 17523)
--- freeswitch/trunk/libs/freetdm/src/ftdm_dso.c 2010-05-11 14:42:32 UTC (rev 17522)
+++ freeswitch/trunk/libs/freetdm/src/ftdm_dso.c 2010-05-11 16:51:28 UTC (rev 17523)
@@ -27,11 +27,12 @@
#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) {
FreeLibrary(*lib);
*lib = NULL;
}
+ return FTDM_SUCCESS;
}
FT_DECLARE(ftdm_dso_lib_t) ftdm_dso_open(const char *path, char **err) {
@@ -78,11 +79,20 @@
#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) {
- dlclose(*lib);
+ rc = dlclose(*lib);
+ 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) {
@@ -93,7 +103,7 @@
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);
if (!func) {
*err = ftdm_strdup(dlerror());
Modified: freeswitch/trunk/libs/freetdm/src/ftmod/ftmod_sangoma_boost/ftmod_sangoma_boost.c (17522 => 17523)
--- freeswitch/trunk/libs/freetdm/src/ftmod/ftmod_sangoma_boost/ftmod_sangoma_boost.c 2010-05-11 14:42:32 UTC (rev 17522)
+++ freeswitch/trunk/libs/freetdm/src/ftmod/ftmod_sangoma_boost/ftmod_sangoma_boost.c 2010-05-11 16:51:28 UTC (rev 17523)
@@ -2142,12 +2142,13 @@
const void *key = NULL;
void *val = NULL;
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)) {
hashtable_this(i, &key, NULL, &val);
if (key && val) {
sigmod = val;
lib = sigmod->pvt;
+ ftdm_log(FTDM_LOG_DEBUG, "destroying sigmod %s\n", sigmod->name);
ftdm_dso_destroy(&lib);
}
}
Modified: freeswitch/trunk/libs/freetdm/src/include/private/ftdm_dso.h (17522 => 17523)
--- freeswitch/trunk/libs/freetdm/src/include/private/ftdm_dso.h 2010-05-11 14:42:32 UTC (rev 17522)
+++ freeswitch/trunk/libs/freetdm/src/include/private/ftdm_dso.h 2010-05-11 16:51:28 UTC (rev 17523)
@@ -17,6 +17,7 @@
*
*/
+#include "freetdm.h"
#ifndef _FTDM_DSO_H
#define _FTDM_DSO_H
@@ -28,7 +29,7 @@
typedef void (*ftdm_func_ptr_t) (void);
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(void *) ftdm_dso_func_sym(ftdm_dso_lib_t lib, const char *sym, char **err);