I forgot to mention that C_WaitForSlotEvent is a function that was unsupported in libmusclepkcs11 but I added, in case someone was wondering. It is irrelevant to the problem I'm experiencing.
Thanks, Carl On Fri, 16 Jul 2004 14:52:04 -0700, Carl Youngblood <[EMAIL PROTECTED]> wrote: > I'm trying to debug a multi-threaded PKCS11 application that I'm > working on. So far the functionality is almost working but I'm having > a really strange problem. > > The program has two threads: one that gets spawned after > initialization that just sits and waits for events, like the token > being inserted or removed. It uses C_WaitForSlotEvent to do this. > > The other thread is the main execution thread. The thing that is > happening is that the looping thread seems to be working just fine, > but the main thread gets stuck inside SCardGetStatusChange (pcsclite > library, source file: winscard_clnt.c on line 1033) trying to lock a > mutex. Here's where it gets weird: The looping thread is continually > locking and unlocking this same mutex as it runs its various function > calls, but for some reason the main thread is never given the lock, as > if the scheduler is being completely unfair or something. As far as I > know, both threads have the same priority (I have done nothing to > change them). > > Here is some debug output from the program execution: > > (There is lots of output before this. At this point, just the main > thread is running.) > Thread = 4143896416 - Mutex = 9f653d0 - SYS_MutexLock (main thread locks mutex) > Thread = 4143896416, SCardGetStatusChange 1.2 > Thread = 4143896416, SCardGetStatusChange 3 > Thread = 4143896416, SCardGetStatusChange 4 > Thread = 4143896416, SCardGetStatusChange 5 > Thread = 4143896416, SCardGetStatusChange 6 > Thread = 4143896416, SCardGetStatusChange 7 > Thread = 4143896416, SCardGetStatusChange 8 > Thread = 4143896416, SCardGetStatusChange 9 > Thread = 4143896416, SCardGetStatusChange 10 > Thread = 4143896416, SCardGetStatusChange 11 > Thread = 4143896416, SCardGetStatusChange 12 > Thread = 4143896416, SCardGetStatusChange 13 > Thread = 4143896416 - Mutex = 9f653d0 - SYS_MutexUnLock (main thread unlocks it) > Thread = 4143896416, SCardGetStatusChange 14 > Thread = 4143819696 - LOOPING THREAD STARTS UP AND DOES SOME STUFF > Thread = 4143819696 - Mutex = bfe800 - SYS_MutexLock > Thread = 4143819696 - Mutex = bfe800 - SYS_MutexUnLock > Thread = 4143819696, MSCWaitForTokenEvent 4 > Thread = 4143819696, SCardGetStatusChange 1 > Thread = 4143819696 - Mutex = be9408 - SYS_MutexLock > Thread = 4143819696 - Mutex = be9408 - SYS_MutexUnLock > Thread = 4143819696, SCardGetStatusChange 1.1 > Thread = 4143819696 - Mutex = 9f653d0 - SYS_MutexLock (looping thread > obtains lock) > Thread = 4143819696, SCardGetStatusChange 1.2 > Thread = 4143819696, SCardGetStatusChange 3 > Thread = 4143819696, SCardGetStatusChange 4 > Thread = 4143819696, SCardGetStatusChange 5 > Thread = 4143819696, SCardGetStatusChange 6 > Thread = 4143819696, SCardGetStatusChange 7 > Thread = 4143819696, SCardGetStatusChange 8 > Thread = 4143819696, SCardGetStatusChange 9 > Thread = 4143896416 - Mutex = bfe800 - SYS_MutexLock (MAIN THREAD AGAIN) > Thread = 4143896416 - Mutex = bfe800 - SYS_MutexUnLock > Thread = 4143896416, MSCWaitForTokenEvent 4 > Thread = 4143896416, SCardGetStatusChange 1 > Thread = 4143896416 - Mutex = be9408 - SYS_MutexLock > Thread = 4143896416 - Mutex = be9408 - SYS_MutexUnLock > Thread = 4143896416, SCardGetStatusChange 1.1 > Thread = 4143896416 - Mutex = 9f653d0 - SYS_MutexLock (main thread > tries to obtain lock. This is the last time we see main thread doing > anything. It gets stuck here.) > Thread = 4143819696, SCardGetStatusChange 10 (LOOPING THREAD RESUMES) > Thread = 4143819696, SCardGetStatusChange 11 > Thread = 4143819696, SCardGetStatusChange 12 > Thread = 4143819696, SCardGetStatusChange 13 > Thread = 4143819696 - Mutex = 9f653d0 - SYS_MutexUnLock (looping > thread unlocks, yet main thread never gets the lock) > Thread = 4143819696, SCardGetStatusChange 14 > Thread = 4143819696, MSCWaitForTokenEvent 5 > Thread = 4143819696, SCardGetStatusChange 1 > Thread = 4143819696 - Mutex = be9408 - SYS_MutexLock > Thread = 4143819696 - Mutex = be9408 - SYS_MutexUnLock > Thread = 4143819696, SCardGetStatusChange 1.1 > Thread = 4143819696 - Mutex = 9f653d0 - SYS_MutexLock (looping thread > locks again. This keeps going on forever.) > Thread = 4143819696, SCardGetStatusChange 1.2 > Thread = 4143819696, SCardGetStatusChange 3 > Thread = 4143819696, SCardGetStatusChange 4 > Thread = 4143819696, SCardGetStatusChange 5 > Thread = 4143819696, SCardGetStatusChange 6 > Thread = 4143819696, SCardGetStatusChange 7 > Thread = 4143819696, SCardGetStatusChange 8 > Thread = 4143819696, SCardGetStatusChange 9 > Thread = 4143819696, SCardGetStatusChange 10 > ... > (lots more output follows) > > Anyone have any ideas? I have no idea why this isn't working. It's > like the scheduler is being unfair or something. > > Thanks, > > Carl Youngblood > _______________________________________________ Muscle mailing list [EMAIL PROTECTED] http://lists.drizzle.com/mailman/listinfo/muscle
