On 2009-06-25 15:59:32 [+1000], Russell Coker wrote: > ==32465== Possible data race during write of size 4 at 0x55D7CE8 > ==32465== at 0x52CD88D: CRYPTO_malloc (mem.c:298) > ==32465== by 0x534AC75: asn1_item_ex_combine_new (tasn_new.c:191) > ==32465== by 0x534E184: ASN1_item_ex_d2i (tasn_dec.c:399) > ==32465== by 0x534E253: ASN1_item_d2i (tasn_dec.c:134) > ==32465== by 0x5344B7E: d2i_PUBKEY (x_pubkey.c:388) > ==32465== by 0x40D580: SelectorInfo::Parse(char*) (dkimverify.cpp:1312) > > Above is a helgrind error I get on my AMD64 system.
Is valgrind still complaining here? > Below is a patch I wrote which appears to solve this problem. According to > the comments on my above blog post it seems possible that this patch will also > slightly improve performance on SMP systems when under heavy load. > > --- ../t/openssl-0.9.8g/crypto/mem.c 2003-12-01 23:06:15.000000000 +1100 > +++ crypto/mem.c 2009-06-25 10:42:03.000000000 +1000 > @@ -254,10 +254,12 @@ > > if (num <= 0) return NULL; > > - allow_customize = 0; > + if(allow_customize) > + allow_customize = 0; > if (malloc_debug_func != NULL) > { > - allow_customize_debug = 0; > + if(allow_customize_debug) > + allow_customize_debug = 0; > malloc_debug_func(NULL, num, file, line, 0); > } > ret = malloc_locked_ex_func(num,file,line); The code is mostly the same in 1.1.0c. The variable is always to 0 so there is no problem if two threads do it at the same time. I see no reason not to close this report. There might be room for improvement to safe a few cycles and not alays set allow_customize to zero. Sebastian