diff options
| -rw-r--r-- | src/ldso/dlerror.c | 13 | 
1 files changed, 8 insertions, 5 deletions
diff --git a/src/ldso/dlerror.c b/src/ldso/dlerror.c index 3fcc7779..d8bbfc03 100644 --- a/src/ldso/dlerror.c +++ b/src/ldso/dlerror.c @@ -35,13 +35,16 @@ void __dl_thread_cleanup(void)  hidden void __dl_vseterr(const char *fmt, va_list ap)  {  	LOCK(freebuf_queue_lock); -	while (freebuf_queue) { -		void **p = freebuf_queue; -		freebuf_queue = *p; -		free(p); -	} +	void **q = freebuf_queue; +	freebuf_queue = 0;  	UNLOCK(freebuf_queue_lock); +	while (q) { +		void **p = *q; +		free(q); +		q = p; +	} +  	va_list ap2;  	va_copy(ap2, ap);  	pthread_t self = __pthread_self();  | 
