Another vlc 2.0.3 update (new ffmpeg! :)

Rainer Hurling rhurlin at gwdg.de
Tue Aug 14 15:25:06 UTC 2012


On 14.08.2012 13:39 (UTC+2), Juergen Lock wrote:
> [Now also posted here:]
>
> On Mon, Aug 13, 2012 at 07:18:52PM -0400, Alexander Kabaev wrote:
>> On Mon, 13 Aug 2012 23:52:12 +0200
>> Juergen Lock <nox at jelal.kn-bremen.de> wrote:
>>
>>> On Mon, Aug 13, 2012 at 08:12:42PM +0200, Gary Jennejohn wrote:
>>>> On Mon, 13 Aug 2012 02:41:35 -0400
>>>> Alexander Kabaev <kabaev at gmail.com> wrote:
>>>>
>>>> [snip lots of gdb trace]
>>>>
>>>>> Please check the use of _SC_GETPW_R_SIZE_MAX in vlcpulse.c. This
>>>>> constant is unsupported, so the module tries to allocate a stack
>>>>> buffer with negative size, smashing the stack dead.
>>>>>
>>>>
>>>> Seems like a good idea, but I replaced the rather sloppy
>>>> 	buf[sysctl(_SC_GETPW_R_SIZE_MAX)];
>>>> with
>>>> 	buf[2048];
>>>> and vlc still core dumps when trying to generate plugins.dat.
>>>
>>> Yeah that seems to be a different issue (rtld).
>>> 	Juergen
>>
>> Please try this patch.
>>
>   Thank you, that fixed both the build crash with the pulseaudio
> knob enabled when the old vlc version was still installed as well
> as the install crash with the notify knob enabled. :)

After svn update of r239253 from head, I built and install 10.0-CURRENT 
amd64. Now vlc-2.0.3 with pulseaudio and inotify enabled builds and 
installs out of the box :-)

Many thanks!
Rainer

> 	Juergen
>> --
>> Alexander Kabaev
>
>> diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
>> index 95358aa..6f6ac70 100644
>> --- a/libexec/rtld-elf/rtld.c
>> +++ b/libexec/rtld-elf/rtld.c
>> @@ -1743,6 +1743,27 @@ init_dag(Obj_Entry *root)
>>       root->dag_inited = true;
>>   }
>>
>> +static void
>> +process_nodelete(Obj_Entry *root)
>> +{
>> +    const Objlist_Entry *elm;
>> +
>> +    /*
>> +     * Walk over object DAG and process every dependent object
>> +     * that is marked as DF_1_NODELETE. They need to grow own
>> +     * dag, which should then be ref-ed separately.
>> +     */
>> +    STAILQ_FOREACH(elm, &root->dagmembers, link) {
>> +	if (elm->obj != NULL && elm->obj->z_nodelete &&
>> +	    !elm->obj->ref_nodel) {
>> +	    dbg("obj %s nodelete", elm->obj->path);
>> +	    init_dag(elm->obj);
>> +	    ref_dag(elm->obj);
>> +	    elm->obj->ref_nodel = true;
>> +	}
>> +    }
>> +    root->dag_inited = true;
>> +}
>>   /*
>>    * Initialize the dynamic linker.  The argument is the address at which
>>    * the dynamic linker has been mapped into memory.  The primary task of
>> @@ -1932,12 +1953,6 @@ process_needed(Obj_Entry *obj, Needed_Entry *needed, int flags)
>>   	  flags & ~RTLD_LO_NOLOAD);
>>   	if (obj1 == NULL && !ld_tracing && (flags & RTLD_LO_FILTEES) == 0)
>>   	    return (-1);
>> -	if (obj1 != NULL && obj1->z_nodelete && !obj1->ref_nodel) {
>> -	    dbg("obj %s nodelete", obj1->path);
>> -	    init_dag(obj1);
>> -	    ref_dag(obj1);
>> -	    obj1->ref_nodel = true;
>> -	}
>>       }
>>       return (0);
>>   }
>> @@ -2833,8 +2848,12 @@ dlopen_object(const char *name, int fd, Obj_Entry *refobj, int lo_flags,
>>   		/* Make list of init functions to call. */
>>   		initlist_add_objects(obj, &obj->next, &initlist);
>>   	    }
>> +	    /*
>> +	     * Process all no_delete objects here, given them own
>> +	     * DAGs to prevent their dependencies from being unloaded.
>> +	     */
>> +	     process_nodelete(obj);
>>   	} else {
>> -
>>   	    /*
>>   	     * Bump the reference counts for objects on this DAG.  If
>>   	     * this is the first dlopen() call for the object that was



More information about the freebsd-ports mailing list