Exemplo n.º 1
0
void
dlmod_unload_module(struct dlmod *dlm)
{
    char            sym_deinit[64];
    int             (*dl_deinit) (void);

    if (!dlm || dlm->status != DLMOD_LOADED)
        return;

    snprintf(sym_deinit, sizeof(sym_deinit), "deinit_%s", dlm->name);
    dl_deinit = dlsym(dlm->handle, sym_deinit);
    if (dl_deinit) {
        DEBUGMSGTL(("dlmod", "Calling deinit_%s()\n", dlm->name));
        dl_deinit();
    } else {
        snprintf(sym_deinit, sizeof(sym_deinit), "shutdown_%s", dlm->name);
        dl_deinit = dlsym(dlm->handle, sym_deinit);
        if (dl_deinit) {
            DEBUGMSGTL(("dlmod", "Calling shutdown_%s()\n", dlm->name));
            dl_deinit();
        } else {
            DEBUGMSGTL(("dlmod", "No destructor for %s\n", dlm->name));
        }
    }
    dlclose(dlm->handle);
    dlm->status = DLMOD_UNLOADED;
    DEBUGMSGTL(("dlmod", "Module %s unloaded\n", dlm->name));
}
Exemplo n.º 2
0
void
dlmod_unload_module(struct dlmod *dlm)
{
    char            sym_deinit[64];
    char            buf[256];
    int             (*dl_deinit) (void);

    if (!dlm || dlm->status != DLMOD_LOADED)
        return;

    snprintf(sym_deinit, sizeof(sym_deinit), "_dynamic_deinit_%s",
             dlm->name);
    dl_deinit = dlsym(dlm->handle, sym_deinit);
    if (dl_deinit == NULL) {
        /** it's right way ? */
        dlm->status = DLMOD_ERROR;
        return;
    }
    dl_deinit();
    dlclose(dlm->handle);
    dlm->status = DLMOD_UNLOADED;
#if 1
    DEBUGMSGTL(("dlmod", "Module %s unloaded\n", dlm->name));
#endif
}