HomeFreeBSD

In r214728, if dlopen() is called for the object that has been already
rS214777Unpublished

Unpublished Commit ยท Learn More

No further details are available.

Description

In r214728, if dlopen() is called for the object that has been already
loaded as a dependency and marked -z nodlopen, object' DAG is already
initialized by load_needed_objects(). Due to this, the init_dag() call
from dlopen() does not increment refcount for the object [1].

Change init_dag() to not increment DAG refcount. Require explicit calls
to ref_dag() to increment, and assert that ref_dag() and unref_dag()
are called for root that has dag initialized. To fix the noted issue,
unconditionally call both init_dag() and ref_dag() in dlopen() for the
case when the object was already loaded, making it similar to the case
of newly loaded object.

Noted by: jh [1]
Reviewed by: jh, kan
MFC after: 6 days

Details

Provenance
kibAuthored on
Parents
rS214776: Fix style.
Branches
Unknown
Tags
Unknown

Event Timeline