diff options
| author | Konstantin Belousov <kib@FreeBSD.org> | 2010-11-04 09:29:00 +0000 |
|---|---|---|
| committer | Konstantin Belousov <kib@FreeBSD.org> | 2010-11-04 09:29:00 +0000 |
| commit | 4495a80b97b28ffd9dc0d76a1cb98e32849e0373 (patch) | |
| tree | 021e20f4851ce474e507d5e40aa6bc82431cf394 /libexec | |
| parent | 5dc7bbafc8b3691fda59806862d8378cf07af3b5 (diff) | |
Notes
Diffstat (limited to 'libexec')
| -rw-r--r-- | libexec/rtld-elf/rtld.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c index 5459f8e9c5f9..bf21586f1218 100644 --- a/libexec/rtld-elf/rtld.c +++ b/libexec/rtld-elf/rtld.c @@ -1290,7 +1290,6 @@ init_dag1(Obj_Entry *root, Obj_Entry *obj, DoneList *dlp) if (donelist_check(dlp, obj)) return; - obj->refcount++; objlist_push_tail(&obj->dldags, root); objlist_push_tail(&root->dagmembers, obj); for (needed = obj->needed; needed != NULL; needed = needed->next) @@ -2031,6 +2030,7 @@ dlopen(const char *name, int mode) assert(*old_obj_tail == obj); result = load_needed_objects(obj, RTLD_LO_DLOPEN); init_dag(obj); + ref_dag(obj); if (result != -1) result = rtld_verify_versions(&obj->dagmembers); if (result != -1 && ld_tracing) @@ -2054,10 +2054,8 @@ dlopen(const char *name, int mode) * already loaded as a dependency, initialize the dag * starting at it. */ - if (obj->dl_refcount == 1) - init_dag(obj); - else - ref_dag(obj); + init_dag(obj); + ref_dag(obj); if (ld_tracing) goto trace; @@ -3085,6 +3083,7 @@ ref_dag(Obj_Entry *root) { Objlist_Entry *elm; + assert(root->dag_inited); STAILQ_FOREACH(elm, &root->dagmembers, link) elm->obj->refcount++; } @@ -3094,6 +3093,7 @@ unref_dag(Obj_Entry *root) { Objlist_Entry *elm; + assert(root->dag_inited); STAILQ_FOREACH(elm, &root->dagmembers, link) elm->obj->refcount--; } |
