There are redundant close() calls in:
       `winscard_svc.c`MSGCleanupClient()
       `winscard_msg_svc.c`SHMProcessEventsContext()

Those are both called by `winscard_svc`ContextThread() when the client dies,
such as when SCardReleaseContext() is called.

The problem is that as soon as the first close() occurs, the fd # is available to be
re-used immediately by the next accept() or open(), ioctl (I_RECVFD), etc...

If SCardEstablishContext() occurs at a certain time, it gets that fd as the context
I/O channel.  Then the 2nd redundant close() in MSGCleanupClient() comes in
right in behind it and closes the fd, after it has been reincarnated,
putting the daemon, client & apps in a world of hurt.

It may have been nailing users on and off for awhile, but been so rare and elusive and hard to nail down that people chalked it up to other layers, or had to re-start
or re-try things.

It became a significant problem in the Sun Ray development project as we
have scaled things up and hit PCSClite with heavy traffic.

Paul


_______________________________________________
Muscle mailing list
[email protected]
http://lists.drizzle.com/mailman/listinfo/muscle

Reply via email to