Closed
Bug 399304
Opened 17 years ago
Closed 17 years ago
cert trust lock and refcount lock should not be initialized late
Categories
(NSS :: Libraries, defect, P2)
NSS
Libraries
Tracking
(Not tracked)
RESOLVED
FIXED
3.11.9
People
(Reporter: slavomir.katuscak+mozilla, Assigned: julien.pierre)
References
Details
Attachments
(2 files)
3.08 KB,
patch
|
nelson
:
review+
rrelyea
:
superreview+
|
Details | Diff | Splinter Review |
1.14 KB,
patch
|
julien.pierre
:
review+
nelson
:
superreview+
|
Details | Diff | Splinter Review |
Yesterday I enabled testing with libpkix on 4 tinderboxes. Today I found 3 of them (2x Solaris, 1x Windows) with strsclnt hanged. I attached one on Solaris to DBX, and here is the stack: Attached to process 12353 with 9 LWPs t@1 (l@1) stopped in __lwp_wait at 0xbf89df87 0xbf89df87: __lwp_wait+0x0007: jae __lwp_wait+0x15 [ 0xbf89df95, .+0xe ] Current function is PR_JoinThread 592 rv = pthread_join(id, &result); (dbx) where current thread: t@1 [1] __lwp_wait(0x2, 0x8046e10), at 0xbf89df87 [2] lwp_wait(0x2, 0x8046e10), at 0xbf8914d3 [3] _thrp_join(0x2, 0x0, 0x8046e58, 0x1), at 0xbf89a1f0 [4] _pthread_join(0x2, 0x8046e58), at 0xbf89a36f =>[5] PR_JoinThread(thred = 0x80bfc78), line 592 in "ptthread.c" [6] reap_threads(), line 500 in "strsclnt.c" [7] client_main(port = 8443U, connections = 10, Cert_And_Key = 0x8046fa0, hostName = 0x8083be8 "dositups.red.iplanet.com"), line 1275 in "strsclnt.c" [8] main(argc = 18, argv = 0x8047018), line 1469 in "strsclnt.c"
Comment 1•17 years ago
|
||
All other threads are yielding with the stack below. =>[1] lwp_yield(0xbfc56000, 0xbf01d10c, 0xbfc44ddb, 0xbfd7372c, 0xbf01d138, 0xbfd5c12f), at 0xbfbfd307 [2] _thr_yield(0xbfd7372c, 0xbf01d138, 0xbfd5c12f, 0xbff1c560, 0xbff24a20, 0xbff1b6a0), at 0xbfbfb6eb [3] sched_yield(0xbff1c560, 0xbff24a20, 0xbff1b6a0, 0x820eff0, 0xbfd42e53, 0xbff24a20), at 0xbfc44ddb [4] PR_Sleep(0x0, 0x820eefc, 0x81fe808, 0xbff1b6a0, 0x820eff0, 0x0), at 0xbfd5c12f [5] nss_InitLock(0xbff1c560, 0x5), at 0xbfe3e791 [6] CERT_LockCertTrust(0x81fe808), at 0xbfe2cb4a [7] CERT_GetCertTrust(0x81fe808, 0xbf01d1e4), at 0xbfe3547a [8] pkix_pl_Pk11CertStore_CheckTrust(0x820685c, 0x820eefc, 0xbf01d284, 0x80b87e8), at 0xbfef115e [9] PKIX_PL_Cert_IsCertTrusted(0x820eefc, 0xbf01d308, 0x80b87e8), at 0xbfeb3007 [10] pkix_Build_VerifyCertificate(0x821c36c, 0x0, 0x1, 0xbf01d44c, 0xbf01d458, 0x821c134, 0x80b87e8), at 0xbfe8b088 [11] pkix_BuildForwardDepthFirstSearch(0xbf01d5f0, 0xbf01d604, 0xbf01d5f8, 0x80b87e8), at 0xbfe8e231 [12] pkix_Build_InitiateBuildChain(0x82128ac, 0xbf01d68c, 0xbf01d684, 0xbf01d688, 0xbf01d758, 0x80b87e8), at 0xbfe92729 [13] PKIX_BuildChain(0x82128ac, 0xbf01d75c, 0xbf01d760, 0xbf01d754, 0xbf01d758, 0x80b87e8), at 0xbfe9326e [14] cert_VerifyCertChainPkix(0x81fce98, 0x1, 0x1, 0xf4df91b0, 0x43c26, 0x0, 0x0, 0x0, 0x0), at 0xbfdf192f [15] CERT_VerifyCert(0x80b88d8, 0x81fce98, 0x1, 0x1, 0xf4df91b0, 0x43c26, 0x0, 0x0), at 0xbfded9a2 [16] CERT_VerifyCertNow(0x80b88d8, 0x81fce98, 0x1, 0x1, 0x0), at 0xbfdede83 [17] SSL_AuthCertificate(0x80b88d8, 0x80c3ec0, 0x1, 0x0), at 0xbff966e9 [18] mySSLAuthCertificate(0x80b88d8, 0x80c3ec0, 0x1, 0x0), at 0x8054d22 [19] ssl3_HandleCertificate(0x81568c0, 0x815ea4b, 0x0), at 0xbff92a75 [20] ssl3_HandleHandshakeMessage(0x81568c0, 0x815e05e, 0x9ed), at 0xbff94541 [21] ssl3_HandleHandshake(0x81568c0, 0x8156b1c), at 0xbff946ef [22] ssl3_HandleRecord(0x81568c0, 0xbf01da24, 0x8156b1c), at 0xbff94e16 [23] ssl3_GatherCompleteHandshake(0x81568c0, 0x0), at 0xbff961e8 [24] ssl_GatherRecord1stHandshake(0x81568c0), at 0xbff97807 [25] ssl_Do1stHandshake(0x81568c0), at 0xbff9d6e3 [26] ssl_SecureSend(0x81568c0, 0x8068a14, 0x15, 0x0), at 0xbff9f761 [27] ssl_Send(0x80c3ec0, 0x8068a14, 0x15, 0x0, 0xffffffff), at 0xbffa4be8 [28] PR_Send(0x80c3ec0, 0x8068a14, 0x15, 0x0, 0xffffffff), at 0xbfd3a66a [29] do_connects(0x8046eb4, 0x8083c00, 0x7), at 0x8056632 [30] thread_wrapper(0x8081a34), at 0x805515c [31] _pt_root(0x80d7410), at 0xbfd5b341 [32] _thr_setup(0xbf521800), at 0xbfbfcf2f [33] _lwp_start(), at 0xbfbfd220
Reporter | ||
Comment 2•17 years ago
|
||
Found 9 threads together, 1 with stack from description and 8 with this: [1] lwp_yield(0x0, 0x5, 0x0, 0xfffffd7ffe8f7e7a, 0x0, 0xfffffd7fff0bcbd8), at 0xfffffd7ffe8f7e7a [2] _thr_yield(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at 0xfffffd7ffe8f5f79 [3] sched_yield(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at 0xfffffd7fff126709 =>[4] PR_Sleep(ticks = 0), line 785 in "ptthread.c" [5] __nss_InitLock(ppLock = 0xfffffd7fff0bcbd8, ltype = nssILockCertDB), line 72 in "nsslocks.c" [6] nss_InitLock(ppLock = 0xfffffd7fff0bcbd8, ltype = nssILockCertDB), line 82 in "nsslocks.c" [7] CERT_LockCertTrust(cert = 0x5ecd50), line 2664 in "certdb.c" [8] CERT_GetCertTrust(cert = 0x5ecd50, trust = 0xfffffd7ffd3fc8fc), line 115 in "stanpcertdb.c" [9] pkix_pl_Pk11CertStore_CheckTrust(store = 0x5f56d8, cert = 0x604ba8, pTrusted = 0xfffffd7ffd3fca20, plContext = 0x4ae5c0), line 104 in "pkix_pl_pk11certstore.c" [10] PKIX_PL_Cert_IsCertTrusted(cert = 0x604ba8, pTrusted = 0xfffffd7ffd3fcb1c, plContext = 0x4ae5c0), line 3252 in "pkix_pl_cert.c" [11] pkix_Build_VerifyCertificate(state = 0x633de8, userCheckers = (nil), revocationChecking = 1, pTrusted = 0xfffffd7ffd3fcd20, pNeedsCRLChecking = 0xfffffd7ffd3fcd0c, verifyNode = 0x6349d8, plContext = 0x4ae5c0), line 1075 in "pkix_build.c" [12] pkix_BuildForwardDepthFirstSearch(pNBIOContext = 0xfffffd7ffd3fced0, pState = 0xfffffd7ffd3fce30, pValResult = 0xfffffd7ffd3fce50, plContext = 0x4ae5c0), line 2734 in "pkix_build.c" [13] pkix_Build_InitiateBuildChain(procParams = 0x618918, pNBIOContext = 0xfffffd7ffd3fd040, pState = 0xfffffd7ffd3fd050, pBuildResult = 0xfffffd7ffd3fd048, pVerifyNode = 0xfffffd7ffd3fd148, plContext = 0x4ae5c0), line 4181 in "pkix_build.c" [14] PKIX_BuildChain(procParams = 0x618918, pNBIOContext = 0xfffffd7ffd3fd140, pState = 0xfffffd7ffd3fd138, pBuildResult = 0xfffffd7ffd3fd150, pVerifyNode = 0xfffffd7ffd3fd148, plContext = 0x4ae5c0), line 4364 in "pkix_build.c" [15] cert_BuildAndValidateChain(procParams = 0x618918, pResult = 0xfffffd7ffd3fd1f0, pVerifyNode = 0xfffffd7ffd3fd1e8, plContext = 0x4ae5c0), line 755 in "certvfypkix.c" [16] cert_VerifyCertChainPkix(cert = 0x4af560, checkSig = 1, requiredUsage = certUsageSSLServer, time = 1192115086273139U, wincx = (nil), log = (nil), pSigerror = (nil), pRevoked = (nil)), line 1142 in "certvfypkix.c" [17] cert_VerifyCertChain(handle = 0x494600, cert = 0x4af560, checkSig = 1, sigerror = (nil), certUsage = certUsageSSLServer, t = 1192115086273139, wincx = (nil), log = (nil), revoked = (nil)), line 946 in "certvfy.c" [18] CERT_VerifyCertChain(handle = 0x494600, cert = 0x4af560, checkSig = 1, certUsage = certUsageSSLServer, t = 1192115086273139, wincx = (nil), log = (nil)), line 958 in "certvfy.c" [19] CERT_VerifyCert(handle = 0x494600, cert = 0x4af560, checkSig = 1, certUsage = certUsageSSLServer, t = 1192115086273139, wincx = (nil), log = (nil)), line 1556 in "certvfy.c" [20] CERT_VerifyCertNow(handle = 0x494600, cert = 0x4af560, checkSig = 1, certUsage = certUsageSSLServer, wincx = (nil)), line 1607 in "certvfy.c" [21] SSL_AuthCertificate(arg = 0x494600, fd = 0x443f30, checkSig = 1, isServer = 0), line 255 in "sslauth.c" [22] mySSLAuthCertificate(arg = 0x494600, fd = 0x443f30, checkSig = 1, isServer = 0), line 280 in "strsclnt.c" [23] ssl3_HandleCertificate(ss = 0x5b4730, b = 0x5bc8dc "^M", length = 0), line 7120 in "ssl3con.c" [24] ssl3_HandleHandshakeMessage(ss = 0x5b4730, b = 0x5bc3de "", length = 1278U), line 7782 in "ssl3con.c" [25] ssl3_HandleHandshake(ss = 0x5b4730, origBuf = 0x5b4ab0), line 7898 in "ssl3con.c" [26] ssl3_HandleRecord(ss = 0x5b4730, cText = 0xfffffd7ffd3fd898, databuf = 0x5b4ab0), line 8161 in "ssl3con.c" [27] ssl3_GatherCompleteHandshake(ss = 0x5b4730, flags = 0), line 206 in "ssl3gthr.c" [28] ssl_GatherRecord1stHandshake(ss = 0x5b4730), line 1258 in "sslcon.c" [29] ssl_Do1stHandshake(ss = 0x5b4730), line 151 in "sslsecur.c" [30] ssl_SecureSend(ss = 0x5b4730, buf = 0x41ef08 "GET /abc HTTP/1.0^M\n^M\n", len = 21, flags = 0), line 1152 in "sslsecur.c" [31] ssl_Send(fd = 0x443f30, buf = 0x41ef08, len = 21, flags = 0, timeout = 4294967295U), line 1432 in "sslsock.c" [32] PR_Send(fd = 0x443f30, buf = 0x41ef08, amount = 21, flags = 0, timeout = 4294967295U), line 226 in "priometh.c" [33] handle_connection(ssl_sock = 0x443f30, tid = 7), line 696 in "strsclnt.c" [34] do_connects(a = 0xfffffd7fffdfec90, b = 0x443970, tid = 7), line 887 in "strsclnt.c" [35] thread_wrapper(arg = 0x43b8d0), line 439 in "strsclnt.c" [36] _pt_root(arg = 0x4d1fa0), line 221 in "ptthread.c" [37] _thr_setup(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at 0xfffffd7ffe8f7b4b [38] _lwp_start(0x0, 0x0, 0x0, 0x0, 0x0, 0x0), at 0xfffffd7ffe8f7d80
Reporter | ||
Comment 3•17 years ago
|
||
I created workaround for this bug for Tinderboxes (it's already running for some days). There is script on one machine (mace) checking every hour PIDs of running selfservs and strsclnts on Tinderbox machines. If PID is the same as it was hour before, the script kills it (to prevent Tinderboxes hangs). You can easy detect this in log, when you can see Terminated message and the time between start and termination is more then one hour (and minutes at termination time are 00).
Assignee | ||
Comment 4•17 years ago
|
||
Slavo, How often is this happening on the tinderbox ? Do you record when your workaround kills the process ? If not, please do. I don't see any evidence in the recent tinderbox run that the process was killed - nearly everything is green for the PKIX runs. I am asking this because I am unable to get any run of all.sh with PKIX in optimized mode on my Linux AMD . It always hangs in strsclnt. The stacks point to a long-standig race condition with trust, but it must be only triggered by the PKIX code. We should never do late initialization of locks. This is recipe for disaster. I will create a patch and see if it fixes the problem for me, then attach it. Taking bug.
Assignee: nobody → julien.pierre.boogz
Assignee | ||
Updated•17 years ago
|
Priority: -- → P2
Summary: Strsclnt hanging when libpkix enabled. → cert trust lock and refcount lock should not be initialized late
Target Milestone: --- → 3.11.9
Version: 3.12 → unspecified
Assignee | ||
Comment 5•17 years ago
|
||
Attachment #287791 -
Flags: superreview?(rrelyea)
Attachment #287791 -
Flags: review?(nelson)
Comment 6•17 years ago
|
||
Comment on attachment 287791 [details] [diff] [review] Initialize cert and trust locks early r+ rrelyea comment... fix the tabs in cert_InitLocks(). These locks clearly can be initialized at startup, if we have locks that need to be lazy initialized we should use PR_CallOnce(). bob
Attachment #287791 -
Flags: superreview?(rrelyea) → superreview+
Comment 7•17 years ago
|
||
Does this only happen in optimized builds? If so, would be nice to examine the assembly code of the while loop in __nss_InitLock. You can try declaring what ppLock points to as volatile: PZLock * volatile *ppLock
Assignee | ||
Comment 8•17 years ago
|
||
Wan-Teh, I have only seen this problem in optimized builds indeed. But it has happened on multiple types of CPUs. It sounds like Slavo has seen it in some debug builds too. I reviewed the source __nss_InitLock and I can't really find anything wrong with it, except for CPUs without total store order, but that would only be possible on AIX (PowerPC), and I saw the problem happened on Linux amd64 and Slavo on Windows x86 . Slavo also saw it on Solaris but didn't specify which CPU type. The patch I attached resolved the hang problem for me on Linux amd64 however.
Comment 10•17 years ago
|
||
Comment on attachment 287791 [details] [diff] [review] Initialize cert and trust locks early r+, with some suggested changes. >@@ -2733,13 +2729,51 @@ > void > CERT_LockCertTrust(CERTCertificate *cert) > { >+ PORT_Assert(certTrustLock != NULL); >+ PZ_Lock(certTrustLock); >+ return; >+} >+ >+SECStatus cert_InitLocks(void) I suggest you make this function match the style used in the other function definitions in this source file, where the return type is defined on a separate line before the file name. >+{ >+ if ( certRefCountLock == NULL ) { >+ nss_InitLock(&certRefCountLock, nssILockRefLock); >+ PORT_Assert(certRefCountLock != NULL); >+ if (!certRefCountLock) { >+ return SECFailure; >+ } >+ } >+ > if ( certTrustLock == NULL ) { > nss_InitLock(&certTrustLock, nssILockCertDB); > PORT_Assert(certTrustLock != NULL); >+ if (!certTrustLock) { >+ PZ_DestroyLock(certRefCountLock); I suggest you set certRefCountLock to NULL here to avoid any possibility of it being destroyed a second time in NSS_Shutdown. >+ return SECFailure; >+ } >+ } >+ >+ return SECSuccess; >+} >+ >+SECStatus cert_DestroyLocks(void) This function also does not follow the style convention.
Attachment #287791 -
Flags: review?(nelson) → review+
Assignee | ||
Comment 11•17 years ago
|
||
Bob, Nelson, thanks for the reviews. I checked this in to the trunk : Checking in certdb/certdb.c; /cvsroot/mozilla/security/nss/lib/certdb/certdb.c,v <-- certdb.c new revision: 1.83; previous revision: 1.82 done Checking in certdb/certi.h; /cvsroot/mozilla/security/nss/lib/certdb/certi.h,v <-- certi.h new revision: 1.22; previous revision: 1.21 done Checking in nss/nssinit.c; /cvsroot/mozilla/security/nss/lib/nss/nssinit.c,v <-- nssinit.c new revision: 1.85; previous revision: 1.84 done and to NSS_3_11_BRANCH : Checking in certdb/certdb.c; /cvsroot/mozilla/security/nss/lib/certdb/certdb.c,v <-- certdb.c new revision: 1.76.2.2; previous revision: 1.76.2.1 done Checking in certdb/certi.h; /cvsroot/mozilla/security/nss/lib/certdb/certi.h,v <-- certi.h new revision: 1.16.24.1; previous revision: 1.16 done Checking in nss/nssinit.c; /cvsroot/mozilla/security/nss/lib/nss/nssinit.c,v <-- nssinit.c new revision: 1.69.2.8; previous revision: 1.69.2.7 done
Status: NEW → RESOLVED
Closed: 17 years ago
Resolution: --- → FIXED
Comment 12•17 years ago
|
||
Comment on attachment 287791 [details] [diff] [review] Initialize cert and trust locks early In certdb.c >+ nss_InitLock(&certRefCountLock, nssILockRefLock); This should be changed to certRefCountLock = PZ_NewLock(nssILockRefLock); and similarly for the other nss_InitLock call in the cert_InitLocks function.
Assignee | ||
Comment 13•17 years ago
|
||
Wan-Teh, Indeed. I proposed doing this accross the board in NSS in bug 403240 comment 1, item 2 . Even after backing out my fix, I can't reproduce the hang on Linux amd optimized right now. Just my luck. And the disassembly from gdb is weird. I believe it's the right instructions, but all the symbol names for the call instructions are wrong. I don't understand why. This is the output without using the volatile keyword. (gdb) disassemble __nss_InitLock_Util Dump of assembler code for function __nss_InitLock_Util: 0x0000002a959fc460 <__nss_InitLock_Util+0>: push %rbx 0x0000002a959fc461 <__nss_InitLock_Util+1>: mov %rdi,%rbx 0x0000002a959fc464 <__nss_InitLock_Util+4>: cmpq $0x0,(%rbx) 0x0000002a959fc468 <__nss_InitLock_Util+8>: jne 0x2a959fc499 <__nss_InitLock_Util+57> 0x0000002a959fc46a <__nss_InitLock_Util+10>: data16 0x0000002a959fc46b <__nss_InitLock_Util+11>: data16 0x0000002a959fc46c <__nss_InitLock_Util+12>: nop 0x0000002a959fc46d <__nss_InitLock_Util+13>: data16 0x0000002a959fc46e <__nss_InitLock_Util+14>: data16 0x0000002a959fc46f <__nss_InitLock_Util+15>: nop 0x0000002a959fc470 <__nss_InitLock_Util+16>: lea 1116081(%rip),%rdi # 0x2a95b0cc28 <initializers.1> 0x0000002a959fc477 <__nss_InitLock_Util+23>: callq 0x2a959f7f38 <PORT_Strdup_Util@plt+48> 0x0000002a959fc47c <__nss_InitLock_Util+28>: dec %eax 0x0000002a959fc47e <__nss_InitLock_Util+30>: je 0x2a959fc49d <__nss_InitLock_Util+61> 0x0000002a959fc480 <__nss_InitLock_Util+32>: xor %edi,%edi 0x0000002a959fc482 <__nss_InitLock_Util+34>: callq 0x2a959f8048 <PORT_ArenaRelease_Util@plt+32> 0x0000002a959fc487 <__nss_InitLock_Util+39>: lea 1116058(%rip),%rdi # 0x2a95b0cc28 <initializers.1> 0x0000002a959fc48e <__nss_InitLock_Util+46>: callq 0x2a959f81e8 <SEC_ASN1DecoderFinish_Util@plt+64> 0x0000002a959fc493 <__nss_InitLock_Util+51>: cmpq $0x0,(%rbx) 0x0000002a959fc497 <__nss_InitLock_Util+55>: je 0x2a959fc470 <__nss_InitLock_Util+16> 0x0000002a959fc499 <__nss_InitLock_Util+57>: xor %eax,%eax 0x0000002a959fc49b <__nss_InitLock_Util+59>: pop %rbx 0x0000002a959fc49c <__nss_InitLock_Util+60>: retq 0x0000002a959fc49d <__nss_InitLock_Util+61>: cmpq $0x0,(%rbx) 0x0000002a959fc4a1 <__nss_InitLock_Util+65>: je 0x2a959fc4be <__nss_InitLock_Util+94> 0x0000002a959fc4a3 <__nss_InitLock_Util+67>: lea 1116030(%rip),%rdi # 0x2a95b0cc28 <initializers.1> 0x0000002a959fc4aa <__nss_InitLock_Util+74>: callq 0x2a959f81e8 <SEC_ASN1DecoderFinish_Util@plt+64> 0x0000002a959fc4af <__nss_InitLock_Util+79>: cmpq $0x0,(%rbx) 0x0000002a959fc4b3 <__nss_InitLock_Util+83>: mov $0xffffffff,%eax 0x0000002a959fc4b8 <__nss_InitLock_Util+88>: je 0x2a959fc49b <__nss_InitLock_Util+59> 0x0000002a959fc4ba <__nss_InitLock_Util+90>: xor %eax,%eax ---Type <return> to continue, or q <return> to quit--- 0x0000002a959fc4bc <__nss_InitLock_Util+92>: jmp 0x2a959fc49b <__nss_InitLock_Util+59> 0x0000002a959fc4be <__nss_InitLock_Util+94>: data16 0x0000002a959fc4bf <__nss_InitLock_Util+95>: nop 0x0000002a959fc4c0 <__nss_InitLock_Util+96>: callq 0x2a959f84b8 <SEC_ASN1DecoderStart_Util@plt+32> 0x0000002a959fc4c5 <__nss_InitLock_Util+101>: mov %rax,(%rbx) 0x0000002a959fc4c8 <__nss_InitLock_Util+104>: jmp 0x2a959fc4a3 <__nss_InitLock_Util+67> 0x0000002a959fc4ca <__nss_InitLock_Util+106>: data16 0x0000002a959fc4cb <__nss_InitLock_Util+107>: data16 0x0000002a959fc4cc <__nss_InitLock_Util+108>: nop 0x0000002a959fc4cd <__nss_InitLock_Util+109>: data16 0x0000002a959fc4ce <__nss_InitLock_Util+110>: data16 0x0000002a959fc4cf <__nss_InitLock_Util+111>: nop End of assembler dump. (gdb)
Comment 14•17 years ago
|
||
Even if nss_InitLock is correct, cert_InitLocks doesn't need to call nss_InitLock because cert_InitLocks is called during NSS initialization, which is performed before any other NSS function can be called.
Comment 15•17 years ago
|
||
Julien, maybe that disassembly was made by a 32-bit debugger on 64-bit code? Those data16's are bogus.
Assignee | ||
Comment 16•17 years ago
|
||
Nelson, Re: comment 15, it was a 64-bit debugger. [jp96085@nssamdrhel4]/net/monstre/export/home/julien/nss/tip/mozilla/dist/Linux2.6_x86_64_glibc_PTH_64_OPT.OBJ/bin 40 % file /usr/bin/gdb /usr/bin/gdb: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.4.0, dynamically linked (uses shared libs), stripped
Comment 17•17 years ago
|
||
Julien, you don't need to examine the assembly code or experiment with volatile as I suggested in comment 7. I figured out why nss_InitLock is broken in bug 403240 comment 7. This patch implements my suggested changes in comment 12. Please review.
Attachment #288517 -
Flags: review?(julien.pierre.boogz)
Assignee | ||
Updated•17 years ago
|
Attachment #288517 -
Flags: review?(julien.pierre.boogz) → review+
Comment 18•17 years ago
|
||
Comment on attachment 288517 [details] [diff] [review] Use PZ_NewLock instead of nss_InitLock I checked in this patch on the NSS trunk (NSS 3.12).
Assignee | ||
Comment 19•17 years ago
|
||
Reopening since a fix is still pending for the branch.
Status: RESOLVED → REOPENED
Resolution: FIXED → ---
Assignee | ||
Comment 20•17 years ago
|
||
Comment on attachment 288517 [details] [diff] [review] Use PZ_NewLock instead of nss_InitLock Nelson, please review this patch for the 3.11 branch. Thanks.
Attachment #288517 -
Flags: superreview?(nelson)
Comment 21•17 years ago
|
||
Comment on attachment 288517 [details] [diff] [review] Use PZ_NewLock instead of nss_InitLock This patch is as correct on the branch as it is on the trunk.
Attachment #288517 -
Flags: superreview?(nelson) → superreview+
Assignee | ||
Comment 22•17 years ago
|
||
Thanks, Nelson. I checked this patch in to NSS_3_11_BRANCH . Checking in certdb.c; /cvsroot/mozilla/security/nss/lib/certdb/certdb.c,v <-- certdb.c new revision: 1.76.2.3; previous revision: 1.76.2.2 done I will create a separate bug to do the same thing in the other places where nss_InitLock is currently called but PZ_NewLock will do just as well.
Status: REOPENED → RESOLVED
Closed: 17 years ago → 17 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•