Fwd: Crashes in CFReadStreamRead()
Fwd: Crashes in CFReadStreamRead()
- Subject: Fwd: Crashes in CFReadStreamRead()
- From: Becky Willrich <email@hidden>
- Date: Thu, 6 Oct 2005 10:40:55 -0700
Whoops; meant to send this to the list, not just to Rich. - REW
Begin forwarded message:
From: Becky Willrich <email@hidden>
Date: October 5, 2005 9:55:59 AM PDT
To: Rich Siegel <email@hidden>
Subject: Re: Crashes in CFReadStreamRead()
Hey Rich -
CFRead/WriteStreams should be safe to use on multiple threads
provided you never use the same stream from two threads at the same
time - a single CFRead/WriteStream is not thread-safe. Are you
accessing the same stream from multiple threads? If so, this is
your bug. If not, it's probably ours. :( Another possibility is
that you are directly manipulating the CFSocket (or maybe the
CFHost, but it would be hard to get at that) that underpins the
CFReadStream; that would also be verboten. Assuming that you're
not doing any of that, please file a bug.
Also, the CFNetwork source is available from Darwin, so you can
always push this a bit further yourself if you wish. Or just throw
us the bug, and we'll do the legwork. :)
Hope that helps,
REW
On Oct 5, 2005, at 7:01 AM, Rich Siegel wrote:
A while back, I converted all of my internal networking from Open
Transport to CFNetwork. The application is pre-emptively threaded
(I'm
using the multiprocessing APIs), and within each thread, the
networking
is synchronous.
In general, it's all working pretty well, but a disturbing number of
beta sites are reporting crashes in which the backtrace of the
crashed
thread looks like this:
Thread 5 Crashed:
0 <<00000000>> 0xfffeff20 objc_msgSend_rtp + 32
1 com.apple.CoreFoundation 0x90749468
__CFSetFindBuckets1b + 140
2 com.apple.CoreFoundation 0x90743284
CFSetContainsValue + 204
3 com.apple.CoreFoundation 0x907597bc
CFRunLoopRemoveSource + 264
4 com.apple.CFNetwork 0x90efa6ac
_SocketStreamRead + 556
5 com.apple.CoreFoundation 0x9079912c
CFReadStreamRead + 360
6 com.barebones.mailsmith 0x00446cc4
CFNetworkHelper::ReceiveData(long&, char const*, unsigned long*) +
820
7 com.barebones.mailsmith 0x00447004
CFNetworkHelper::ReceiveLine(char*, unsigned long) + 68
..essentially, the CFReadStreamRead() is crashing in code called from
CFRunLoopRemoveSource().
In all of the backtraces, there are in fact several CFNetwork threads
running, and the main thread is in the middle of
RunCurrentEventLoop().
Here's the whole thing, with some frames at the end omitted for
brevity
and to protect the innocent:
Thread 0:
0 libSystem.B.dylib 0x9000a738 mach_msg_trap + 8
1 libSystem.B.dylib 0x9000a67c mach_msg + 60
2 com.apple.CoreFoundation 0x9074b338 __CFRunLoopRun
+ 832
3 com.apple.CoreFoundation 0x9074ac3c
CFRunLoopRunSpecific + 268
4 com.apple.HIToolbox 0x93129ac0
RunCurrentEventLoopInMode + 264
5 com.apple.HIToolbox 0x9320e768
GetNextEventMatchingMask + 400
6 com.apple.HIToolbox 0x9320e51c WNEInternal + 140
7 com.apple.HIToolbox 0x9320e47c WaitNextEvent + 76
[12 frames omitted]
Thread 1:
0 libSystem.B.dylib 0x9001efcc select + 12
1 com.apple.CoreFoundation 0x9075dbcc
__CFSocketManager + 472
2 libSystem.B.dylib 0x9002c3b4 _pthread_body + 96
Thread 2:
0 <<00000000>> 0xffff85d8 __spin_lock_relinquish + 24
(cpu_capabilities.h:186)
1 com.apple.CFNetwork 0x90efa65c
_SocketStreamRead + 476
2 com.apple.CoreFoundation 0x9079912c
CFReadStreamRead + 360
3 com.barebones.mailsmith 0x00446cc4
CFNetworkHelper::ReceiveData(long&, char const*, unsigned long*) +
820
4 com.barebones.mailsmith 0x00447004
CFNetworkHelper::ReceiveLine(char*, unsigned long) + 68
5 com.barebones.mailsmith 0x003eda2c CSmtp::AuthLogin
(char*, char*) + 4444
6 com.barebones.mailsmith 0x003ef010
CSmtp::Authenticate(bool, char*, char*) + 248
[6 frames omitted]
Thread 3:
0 libSystem.B.dylib 0x9000a738 mach_msg_trap + 8
1 libSystem.B.dylib 0x9000a67c mach_msg + 60
2 com.apple.CoreFoundation 0x9074b338 __CFRunLoopRun
+ 832
3 com.apple.CoreFoundation 0x9074ac3c
CFRunLoopRunSpecific + 268
4 com.apple.CFNetwork 0x90efa654
_SocketStreamRead + 468
5 com.apple.CoreFoundation 0x9079912c
CFReadStreamRead + 360
6 com.barebones.mailsmith 0x00446cc4
CFNetworkHelper::ReceiveData(long&, char const*, unsigned long*) +
820
7 com.barebones.mailsmith 0x00447004
CFNetworkHelper::ReceiveLine(char*, unsigned long) + 68
8 com.barebones.mailsmith 0x003e7e88
CPop::SendCommand(char const*, char const*) + 140
[6 frames omitted]
Thread 4:
0 libSystem.B.dylib 0x9000a738 mach_msg_trap + 8
1 libSystem.B.dylib 0x9000a67c mach_msg + 60
2 com.apple.CoreFoundation 0x9074b338 __CFRunLoopRun
+ 832
3 com.apple.CoreFoundation 0x9074ac3c
CFRunLoopRunSpecific + 268
4 com.apple.CFNetwork 0x90efa654
_SocketStreamRead + 468
5 com.apple.CoreFoundation 0x9079912c
CFReadStreamRead + 360
6 com.barebones.mailsmith 0x00446cc4
CFNetworkHelper::ReceiveData(long&, char const*, unsigned long*) +
820
7 com.barebones.mailsmith 0x00447004
CFNetworkHelper::ReceiveLine(char*, unsigned long) + 68
8 com.barebones.mailsmith 0x003e7e88
CPop::SendCommand(char const*, char const*) + 140
[6 frames omitted]
Thread 5 Crashed:
0 <<00000000>> 0xfffeff20 objc_msgSend_rtp + 32
1 com.apple.CoreFoundation 0x90749468
__CFSetFindBuckets1b + 140
2 com.apple.CoreFoundation 0x90743284
CFSetContainsValue + 204
3 com.apple.CoreFoundation 0x907597bc
CFRunLoopRemoveSource + 264
4 com.apple.CFNetwork 0x90efa6ac
_SocketStreamRead + 556
5 com.apple.CoreFoundation 0x9079912c
CFReadStreamRead + 360
6 com.barebones.mailsmith 0x00446cc4
CFNetworkHelper::ReceiveData(long&, char const*, unsigned long*) +
820
7 com.barebones.mailsmith 0x00447004
CFNetworkHelper::ReceiveLine(char*, unsigned long) + 68
[7 frames omitted]
Is it possible that running CFNetwork synchronously on multiple
threads
is a bad idea? Could there be a bug in CFNetwork or CFRunLoop in
which a
shared data structure is being mangled? Do I have a bug? (Always a
possibility.)
Thanks for any advice,
R.
--
Rich Siegel Bare Bones Software, Inc.
<email@hidden> <http://
www.barebones.com/>
Someday I'll look back on all this and laugh... until they sedate me.
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Macnetworkprog mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Macnetworkprog mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden