if ((smp = map_object(sodp, 0)) == NULL) {
if ((smp = map_object(sodp, main_map)) == NULL) {
__dlopen(name, mode)	const char	*name;	int		mode;{	struct sod	*sodp;	struct so_map	*smp;	/*	 * A NULL argument returns the current set of mapped objects.	 */	if (name == NULL) {		LM_PRIVATE(link_map_head)->spd_refcount++;		return link_map_head;	}	if ((sodp = (struct sod *)malloc(sizeof(struct sod))) == NULL) {		dlerrno = ENOMEM;		return NULL;	}	build_sod(name, sodp);	if ((smp = map_object(sodp, 0)) == NULL) {#ifdef DEBUGxprintf("%s: %s\n", name, strerror(errno));#endif		dlerrno = errno;		free((char *)sodp->sod_name);		free(sodp);		return NULL;	}	LM_PRIVATE(smp)->spd_flags |= RTLD_DL;	if (LM_PRIVATE(smp)->spd_refcount++ > 0) {		free((char *)sodp->sod_name);		free(sodp);		return smp;	}	if (load_subs(smp) != 0) {		if (--LM_PRIVATE(smp)->spd_refcount == 0) {			unmap_object(smp);			free_link_map(smp);		}		return NULL;	}	init_maps(smp);	return smp;}