Question about pthread_getspecific with jemalloc

Ethan Burns burns.ethan at gmail.com
Tue Jun 14 14:13:10 PDT 2011


On Tue, Jun 14, 2011 at 1:48 PM, Ethan Burns <burns.ethan at gmail.com> wrote:
> I am experiencing strange behavior with pthread_getspecific when I
> link with jemalloc.  What happens is, after calling malloc(), the
> value of one of my keys seems to change out from under me.  Here is a
> small example that demonstrates this:
> http://itsapad.appspot.com/fancy/6.  I am using jemalloc-2.2.1 on
> Linux.  If I compile the example with gcc (ver 4.4.3) using the
> following command: 'gcc -lpthread main.c' then both calls to
> pthread_getspecific return a NULL pointer as expected.  When I link
> with jemalloc, however, ('gcc -ljemalloc -lpthread main.c') then the
> second call to pthread_getspecific returns some non-NULL value.  Is
> this a known bug or am I doing something wrong?

I have done a bit of digging.  It looks like the call to the macro
ARENA_SET on src/jemalloc.c:794 calls pthread_setspecific on the
arenas_tsd key before the key is actually created on
src/jemalloc.c:800.  The attached patch seems to fix the problem.  I
am not familiar with the code so I am not really sure that this patch
doesn't introduce a new bug but if so, I didn't hit it.

Ethan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pthread-key.patch
Type: text/x-patch
Size: 868 bytes
Desc: not available
URL: <http://jemalloc.net/mailman/jemalloc-discuss/attachments/20110614/b483effd/attachment.bin>


More information about the jemalloc-discuss mailing list