459 |
int |
int |
460 |
pupa_dl_ref (pupa_dl_t mod) |
pupa_dl_ref (pupa_dl_t mod) |
461 |
{ |
{ |
462 |
|
pupa_dl_dep_t dep; |
463 |
|
|
464 |
|
for (dep = mod->dep; dep; dep = dep->next) |
465 |
|
pupa_dl_ref (dep->mod); |
466 |
|
|
467 |
return ++mod->ref_count; |
return ++mod->ref_count; |
468 |
} |
} |
469 |
|
|
470 |
int |
int |
471 |
pupa_dl_unref (pupa_dl_t mod) |
pupa_dl_unref (pupa_dl_t mod) |
472 |
{ |
{ |
473 |
int ret; |
pupa_dl_dep_t dep; |
474 |
|
|
475 |
ret = --mod->ref_count; |
for (dep = mod->dep; dep; dep = dep->next) |
476 |
if (ret <= 0) |
pupa_dl_unref (dep->mod); |
477 |
pupa_dl_unload (mod); |
|
478 |
|
return --mod->ref_count; |
|
return ret; |
|
479 |
} |
} |
480 |
|
|
481 |
/* Load a module from core memory. */ |
/* Load a module from core memory. */ |
609 |
for (dep = mod->dep; dep; dep = depn) |
for (dep = mod->dep; dep; dep = depn) |
610 |
{ |
{ |
611 |
depn = dep->next; |
depn = dep->next; |
612 |
pupa_dl_unref (dep->mod); |
|
613 |
|
if (! pupa_dl_unref (dep->mod)) |
614 |
|
pupa_dl_unload (dep->mod); |
615 |
|
|
616 |
pupa_free (dep); |
pupa_free (dep); |
617 |
} |
} |
618 |
|
|