Version: 1.8.0 (using KDE 4.3.1) Compiler: gcc (GCC) 4.3.2 20081105 (Red Hat 4.3.2-7) OS: Linux Installed from: Fedora RPMs I have a set of KstScripts that I use for generating different types of plots. I also have a custom data source plugin. When I initiate Kst via a script to plot a large data file, it will simultaneously add curves to the plot and read in chunks of data, which will somehow cause a segfault. The segfault occurs when KstVector::interpolate() reads from _v at the same time as KstVector::resize() is zeroing a new section of _v. The reads and writes occur in different parts of _v. I've included the backtraces for both threads and relevant code snippets below. I've marked the locations where the segfault occurs in both code snippets. Note that I copied the GENERATE_INTERPOLATION macro into the KstVector::interpolate() function so that I could see what was going on in gdb. Program received signal SIGSEGV, Segmentation fault. 0x00da84fe in KstVector::interpolate (this=0x866ba28, in_i=7624, ns_i=31206) at kstvector.cpp:185 Thread 1: #0 0x00da84fe in KstVector::interpolate (this=0x866ba28, in_i=7624, ns_i=31206) at kstvector.cpp:185 #1 0x0057d84b in KstVCurve::paint (this=0x883a0d0, context=@0xbfffc9f4) at kstvcurve.cpp:1475 #2 0x002cabc4 in Kst2DPlot::draw (this=0x88720b0, p=@0xbfffcd20) at kst2dplot.cpp:2902 #3 0x002cb3f6 in Kst2DPlot::draw (this=0x88720b0) at kst2dplot.cpp:2737 #4 0x002cb4cc in Kst2DPlot::updateSelf (this=0x88720b0) at kst2dplot.cpp:2661 #5 0x00312935 in KstViewObject::paintUpdate (this=0x88720b0) at kstviewobject.cpp:426 #6 0x00315887 in KstViewObject::paint (this=0x88720b0, p=@0xbfffd028, bounds=@0xbfffcfc8) at kstviewobject.cpp:340 #7 0x00315b94 in KstViewObject::paint (this=0x865d3c8, p=@0xbfffd028, bounds=@0xbfffd198) at kstviewobject.cpp:373 #8 0x003340af in KstTopLevelView::paint (this=0x865d3c8, p=@0xbfffd028, bounds=@0xbfffd198) at ksttoplevelview.cpp:190 #9 0x0032b35f in KstTopLevelView::paint (this=0x865d3c8, type=KstPainter::P_PAINT, bounds=@0xbfffd198) at ksttoplevelview.cpp:209 #10 0x0032b492 in KstTopLevelView::paint (this=0x865d3c8, type=KstPainter::P_PAINT) at ksttoplevelview.cpp:199 #11 0x0042c239 in KstApp::paintAll (this=0x80bb308, pt=KstPainter::P_PAINT) at kst.cpp:1970 #12 0x011f8e62 in KstBindCurveCollection::append (this=0xb7000d70, exec=0xbfffd778, args=@0xbfffd374) at bind_curvecollection.cpp:155 #13 0x011f318e in KstBindCollection::call (this=0x891c678, exec=0xbfffd778, self=@0xbfffd380, args=@0xbfffd374) at bind_collection.cpp:116 #14 0x0139dcb9 in KJS::Object::call (this=0xbfffd398, exec=0xbfffd778, thisObj=@0xbfffd380, args=@0xbfffd374) at object.cpp:73 #15 0x013b7593 in KJS::FunctionCallNode::evaluate (this=0x8288d58, exec=0xbfffd778) at nodes.cpp:870 #16 0x013b5006 in KJS::ExprStatementNode::execute (this=0x84e5700, exec=0xbfffd778) at nodes.cpp:1980 #17 0x013b3638 in KJS::SourceElementsNode::execute (this=0x84edc88, exec=0xbfffd778) at nodes.cpp:3114 #18 0x013ae7a9 in KJS::BlockNode::execute (this=0x8375648, exec=0xbfffd778) at nodes.cpp:1942 #19 0x013b410c in KJS::ForNode::execute (this=0x8375678, exec=0xbfffd778) at nodes.cpp:2199 #20 0x013b3638 in KJS::SourceElementsNode::execute (this=0x85fcdf8, exec=0xbfffd778) at nodes.cpp:3114 #21 0x013ae7a9 in KJS::BlockNode::execute (this=0x837ada0, exec=0xbfffd778) at nodes.cpp:1942 #22 0x013b7f9d in KJS::InterpreterImp::evaluate (this=0x831f3e0, code=@0xbfffd834, thisV=@0xbfffd838) at internal.cpp:904 #23 0x013b837a in KJS::Interpreter::evaluate (this=0x84ba008, code=@0xbfffd834, thisV=@0xbfffd838) at interpreter.cpp:166 #24 0x01277227 in KJSEmbed::KJSEmbedPart::execute (this=0x82793a0, result=@0x8279434, script=@0xbfffd888, self=@0xbfffd90c) at kjsembedpart.cpp:262 #25 0x0127576c in KJSEmbed::KJSEmbedPart::execute (this=0x82793a0, script=@0xbfffd888, self=@0xbfffd90c) at kjsembedpart.cpp:256 #26 0x01278499 in KJSEmbed::KJSEmbedPart::runFile (this=0x82793a0, name=@0xbfffd91c, self=@0xbfffd90c) at kjsembedpart.cpp:294 #27 0x011cb021 in KstBindKst::loadScript (this=0x8663778, exec=0xbfffdc98, args=@0xbfffda14) at bind_kst.cpp:207 #28 0x011ca47e in KstBindKst::call (this=0x86637e8, exec=0xbfffdc98, self=@0xbfffda20, args=@0xbfffda14) at bind_kst.cpp:182 #29 0x0139dcb9 in KJS::Object::call (this=0xbfffda38, exec=0xbfffdc98, thisObj=@0xbfffda20, args=@0xbfffda14) at object.cpp:73 #30 0x013b7593 in KJS::FunctionCallNode::evaluate (this=0x8482778, exec=0xbfffdc98) at nodes.cpp:870 #31 0x013b5006 in KJS::ExprStatementNode::execute (this=0x815b8c8, exec=0xbfffdc98) at nodes.cpp:1980 #32 0x013b3638 in KJS::SourceElementsNode::execute (this=0x815c150, exec=0xbfffdc98) at nodes.cpp:3114 #33 0x013ae7a9 in KJS::BlockNode::execute (this=0x83a7778, exec=0xbfffdc98) at nodes.cpp:1942 #34 0x013b7f9d in KJS::InterpreterImp::evaluate (this=0x831f3e0, code=@0xbfffdd54, thisV=@0xbfffdd58) at internal.cpp:904 #35 0x013b837a in KJS::Interpreter::evaluate (this=0x84ba008, code=@0xbfffdd54, thisV=@0xbfffdd58) at interpreter.cpp:166 #36 0x01277227 in KJSEmbed::KJSEmbedPart::execute (this=0x82793a0, result=@0xbfffdda8, script=@0xbfffde84, self=@0xbfffdde0) at kjsembedpart.cpp:262 #37 0x011aefd3 in JSIfaceImpl::evaluate (this=0x82f4398, script=@0xbfffde84) at jsiface_impl.cpp:50 #38 0x012736ad in JSIface::process (this=0x82f4398, fun=@0xbfffe0e4, data=@0xbfffe0dc, replyType=@0xbfffe0d4, replyData=@0xbfffe0cc) at jsiface_skel.cpp:33 #39 0x00855f8e in DCOPClient::receive (this=0x809c5b0, objId=@0xbfffe0ec, fun=@0xbfffe0e4, data=@0xbfffe0dc, replyType=@0xbfffe0d4, replyData=@0xbfffe0cc) at dcopclient.cpp:1643 #40 0x0085b3d1 in DCOPProcessInternal (d=0x80a6098, opcode=2, key=52, dataReceived=@0xbfffe1c0, canPost=true) at dcopclient.cpp:520 #41 0x0085be2a in DCOPProcessMessage (iceConn=0x80a20e0, clientObject=0x80a6098, opcode=2, length=544, replyWait=0x0, replyWaitRet=0xbfffe214) at dcopclient.cpp:432 #42 0x00868e14 in KDE_IceProcessMessages (iceConn=0x80a20e0, replyWait=0x0, replyReadyRet=0x0) at process.c:326 #43 0x0084c6df in DCOPClient::processSocketData (this=0x809c5b0, fd=12) at dcopclient.cpp:2014 #44 0x0085bb34 in DCOPClient::qt_invoke (this=0x809c5b0, _id=2, _o=0xbfffe36c) at ./dcopclient.moc:176 #45 0x022b0e4a in QObject::activate_signal (this=0x809c158, clist=0x80a0570, o=0xbfffe36c) at kernel/qobject.cpp:2359 #46 0x022b2c43 in QObject::activate_signal (this=0x809c158, signal=2, param=12) at kernel/qobject.cpp:2452 #47 0x0264a6c0 in QSocketNotifier::activated (this=0x809c158, t0=12) at .moc/release-shared-mt/moc_qsocketnotifier.cpp:85 #48 0x022d3267 in QSocketNotifier::event (this=0x809c158, e=0xbfffe6a8) at kernel/qsocketnotifier.cpp:261 #49 0x02247f75 in QApplication::internalNotify (this=0xbffff170, receiver=0x809c158, e=0xbfffe6a8) at kernel/qapplication.cpp:2638 #50 0x022490c6 in QApplication::notify (this=0xbffff170, receiver=0x809c158, e=0xbfffe6a8) at kernel/qapplication.cpp:2375 #51 0x02bf1262 in KApplication::notify (this=0xbffff170, receiver=0x809c158, event=0xbfffe6a8) at kapplication.cpp:550 #52 0x0223b961 in QApplication::sendEvent () at kernel/qapplication.h:523 #53 QEventLoop::activateSocketNotifiers (this=0x80992f0) at kernel/qeventloop_unix.cpp:581 #54 0x021f0aa3 in QEventLoop::processEvents (this=0x80992f0, flags=4) at kernel/qeventloop_x11.cpp:386 #55 0x02262630 in QEventLoop::enterLoop (this=0x80992f0) at kernel/qeventloop.cpp:201 #56 0x022624f6 in QEventLoop::exec (this=0x80992f0) at kernel/qeventloop.cpp:148 #57 0x0224864f in QApplication::exec (this=0xbffff170) at kernel/qapplication.cpp:2761 #58 0x080539eb in main (argc=1, argv=0xbffff2f4) at main.cpp:854 double KstVector::interpolate(int in_i, int ns_i) const { assert(_size > 0); /** Limits checks - optional? **/ if (in_i < 0 || _size == 1) { return _v[0]; } if (in_i >= ns_i - 1) { return _v[_size - 1]; } /** speedup check **/ if (ns_i == _size) { /* no extrapolating or decimating needed */ return _v[in_i]; /* Thread 1 segfaults here */ } double fj = in_i * double(_size - 1) / double(ns_i-1); /* scaled index */ int j = int(floor(fj)); /* index of sample one lower */ assert(j+1 < _size && j >= 0); if (_v[j + 1] != _v[j + 1] || _v[j] != _v[j]) { return KST::NOPOINT; } double fdj = fj - float(j); /* fdj is fraction between _v[j] and _v[j+1] */ return _v[j + 1] * fdj + _v[j] * (1.0 - fdj); } Thread 2: #0 0x00da9b10 in KstVector::resize (this=0x866ba28, sz=46809, reinit=true) at kstvector.cpp:464 #1 0x00db2d5d in KstRVector::doUpdate (this=0x866ba28, force=false) at kstrvector.cpp:629 #2 0x00db33fc in KstRVector::update (this=0x866ba28, update_counter=25) at kstrvector.cpp:459 #3 0x00579d42 in KstVCurve::update (this=0x866fb08, update_counter=25) at kstvcurve.cpp:249 #4 0x003b7642 in UpdateThread::doUpdates (this=0x858fdf0, force=false, gotData=0xb7b1633b) at updatethread.cpp:212 #5 0x003b8e47 in UpdateThread::run (this=0x858fdf0) at updatethread.cpp:114 #6 0x022414bc in QThreadInstance::start (_arg=0x859176c) at kernel/qthread_unix.cpp:122 #7 0x00ae851f in start_thread (arg=0xb7b16b90) at pthread_create.c:297 #8 0x00eb604e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130 bool KstVector::resize(int sz, bool reinit) { if (sz > 0) { _v = static_cast<double*>(KST::realloc(_v, sz*sizeof(double))); if (!_v) { return false; } #ifdef ZERO_MEMORY if (reinit && _size < sz) { for (int i = _size; i < sz; i++) { _v[i] = KST::NOPOINT; /* Thread 2 is concurrently at this point */ } } #endif _size = sz; updateScalars(); } setDirty(); return true; } After some serious digging, the segfault actually appears to be some kind of floating point exception that doesn't get handled properly (or something along those lines). This is the instruction that causes the SIGSEGV: fldl 0x8(%edx,%ecx,8) And here's the status of the FPU when the segfault occurs: (gdb) info float R7: Empty 0x4006e500000000000000 R6: Empty 0x3ffe8000000000000000 R5: Empty 0x40088b14e3d6180c0000 R4: Empty 0x00000000000000000000 R3: Empty 0x40069f00000000000000 R2: Empty 0x00000000000000000000 R1: Empty 0x00000000000000000000 =>R0: Empty 0x00000000000000000000 Status Word: 0x0023 IE DE PE TOP: 0 Control Word: 0x037f IM DM ZM OM UM PM PC: Extended Precision (64-bits) RC: Round to nearest Tag Word: 0xffff Instruction Pointer: 0x73:0x00170755 Operand Pointer: 0x7b:0xbfffc784 Opcode: 0xdb9d I haven't tried recompiling the kernel yet with printk's in the floating point exception code to see if I can figure out what's really going on. I fixed the problem with a somewhat brute force approach by adding a mutex to the two functions.
Created attachment 37228 [details] Adds mutexes to a couple of functions that were causing a segfault I've attached my brute force mutex patch.
SVN commit 1029881 by arwalker: BUG:208832 fix threading problem with updating and plotting of vectors M +2 -0 kst2dplot.cpp WebSVN link: http://websvn.kde.org/?view=rev&revision=1029881
Michael, many thanks for the bug report. Particularly with the stack traces, which always makes life much simpler. I think the implemented fix is a little cleaner and has less of a performance impact on the plotting. I also think/hope I've convinced myself that it won't cause deadlocks anywhere.
No problem. I'm glad I could help. I'll let you know if I run into any deadlocks ;)
Doh, I spoke too soon. It's still segfaulting occasionally for me. It does seem to be less frequent now though. The backtraces look identical to me. Program received signal SIGSEGV, Segmentation fault. 0x005af59e in KstVector::interpolate (this=0x8668d10, in_i=27082, ns_i=46809) at kstvector.cpp:202 202 GENERATE_INTERPOLATION Thread 1: #0 0x005af59e in KstVector::interpolate (this=0x8668d10, in_i=27082, ns_i=46809) at kstvector.cpp:202 #1 0x009de84b in KstVCurve::paint (this=0x88348b8, context=@0xbfffc9f4) at kstvcurve.cpp:1475 #2 0x00bf0b68 in Kst2DPlot::draw (this=0x8870360, p=@0xbfffcd20) at kst2dplot.cpp:2903 #3 0x00bf13b6 in Kst2DPlot::draw (this=0x8870360) at kst2dplot.cpp:2737 #4 0x00bf148c in Kst2DPlot::updateSelf (this=0x8870360) at kst2dplot.cpp:2661 #5 0x00c388e5 in KstViewObject::paintUpdate (this=0x8870360) at kstviewobject.cpp:426 #6 0x00c3b837 in KstViewObject::paint (this=0x8870360, p=@0xbfffd028, bounds=@0xbfffcfc8) at kstviewobject.cpp:340 #7 0x00c3bb44 in KstViewObject::paint (this=0x84ca678, p=@0xbfffd028, bounds=@0xbfffd198) at kstviewobject.cpp:373 #8 0x00c5a05f in KstTopLevelView::paint (this=0x84ca678, p=@0xbfffd028, bounds=@0xbfffd198) at ksttoplevelview.cpp:190 #9 0x00c5130f in KstTopLevelView::paint (this=0x84ca678, type=KstPainter::P_PAINT, bounds=@0xbfffd198) at ksttoplevelview.cpp:209 #10 0x00c51442 in KstTopLevelView::paint (this=0x84ca678, type=KstPainter::P_PAINT) at ksttoplevelview.cpp:199 #11 0x00d52199 in KstApp::paintAll (this=0x80b7a50, pt=KstPainter::P_PAINT) at kst.cpp:1970 #12 0x0124de62 in KstBindCurveCollection::append (this=0xb5bfa188, exec=0xbfffd778, args=@0xbfffd374) at bind_curvecollection.cpp:155 #13 0x0124818e in KstBindCollection::call (this=0x8852cf0, exec=0xbfffd778, self=@0xbfffd380, args=@0xbfffd374) at bind_collection.cpp:116 #14 0x053e7cb9 in KJS::Object::call (this=0xbfffd398, exec=0xbfffd778, thisObj=@0xbfffd380, args=@0xbfffd374) at object.cpp:73 #15 0x05401593 in KJS::FunctionCallNode::evaluate (this=0x82e4838, exec=0xbfffd778) at nodes.cpp:870 #16 0x053ff006 in KJS::ExprStatementNode::execute (this=0x82e4850, exec=0xbfffd778) at nodes.cpp:1980 #17 0x053fd638 in KJS::SourceElementsNode::execute (this=0x8303ad8, exec=0xbfffd778) at nodes.cpp:3114 #18 0x053f87a9 in KJS::BlockNode::execute (this=0x84b9fb0, exec=0xbfffd778) at nodes.cpp:1942 #19 0x053fe10c in KJS::ForNode::execute (this=0x84b8438, exec=0xbfffd778) at nodes.cpp:2199 #20 0x053fd638 in KJS::SourceElementsNode::execute (this=0x84d5988, exec=0xbfffd778) at nodes.cpp:3114 #21 0x053f87a9 in KJS::BlockNode::execute (this=0x848ca80, exec=0xbfffd778) at nodes.cpp:1942 #22 0x05401f9d in KJS::InterpreterImp::evaluate (this=0x8429b20, code=@0xbfffd834, thisV=@0xbfffd838) at internal.cpp:904 #23 0x0540237a in KJS::Interpreter::evaluate (this=0x8471490, code=@0xbfffd834, thisV=@0xbfffd838) at interpreter.cpp:166 #24 0x012cc227 in KJSEmbed::KJSEmbedPart::execute (this=0x83214b0, result=@0x8321544, script=@0xbfffd888, self=@0xbfffd90c) at kjsembedpart.cpp:262 #25 0x012ca76c in KJSEmbed::KJSEmbedPart::execute (this=0x83214b0, script=@0xbfffd888, self=@0xbfffd90c) at kjsembedpart.cpp:256 #26 0x012cd499 in KJSEmbed::KJSEmbedPart::runFile (this=0x83214b0, name=@0xbfffd91c, self=@0xbfffd90c) at kjsembedpart.cpp:294 #27 0x01220021 in KstBindKst::loadScript (this=0x865e7e8, exec=0xbfffdc98, args=@0xbfffda14) at bind_kst.cpp:207 #28 0x0121f47e in KstBindKst::call (this=0x865e858, exec=0xbfffdc98, self=@0xbfffda20, args=@0xbfffda14) at bind_kst.cpp:182 #29 0x053e7cb9 in KJS::Object::call (this=0xbfffda38, exec=0xbfffdc98, thisObj=@0xbfffda20, args=@0xbfffda14) at object.cpp:73 #30 0x05401593 in KJS::FunctionCallNode::evaluate (this=0x844e0e8, exec=0xbfffdc98) at nodes.cpp:870 #31 0x053ff006 in KJS::ExprStatementNode::execute (this=0x822db20, exec=0xbfffdc98) at nodes.cpp:1980 #32 0x053fd638 in KJS::SourceElementsNode::execute (this=0x8158030, exec=0xbfffdc98) at nodes.cpp:3114 #33 0x053f87a9 in KJS::BlockNode::execute (this=0x827ce48, exec=0xbfffdc98) at nodes.cpp:1942 #34 0x05401f9d in KJS::InterpreterImp::evaluate (this=0x8429b20, code=@0xbfffdd54, thisV=@0xbfffdd58) at internal.cpp:904 #35 0x0540237a in KJS::Interpreter::evaluate (this=0x8471490, code=@0xbfffdd54, thisV=@0xbfffdd58) at interpreter.cpp:166 #36 0x012cc227 in KJSEmbed::KJSEmbedPart::execute (this=0x83214b0, result=@0xbfffdda8, script=@0xbfffde84, self=@0xbfffdde0) at kjsembedpart.cpp:262 #37 0x01203fd3 in JSIfaceImpl::evaluate (this=0x85e8338, script=@0xbfffde84) at jsiface_impl.cpp:50 #38 0x012c86ad in JSIface::process (this=0x85e8338, fun=@0xbfffe0e4, data=@0xbfffe0dc, replyType=@0xbfffe0d4, replyData=@0xbfffe0cc) at jsiface_skel.cpp:33 #39 0x00485f8e in DCOPClient::receive (this=0x809bff0, objId=@0xbfffe0ec, fun=@0xbfffe0e4, data=@0xbfffe0dc, replyType=@0xbfffe0d4, replyData=@0xbfffe0cc) at dcopclient.cpp:1643 #40 0x0048b3d1 in DCOPProcessInternal (d=0x80a3dc8, opcode=2, key=69, dataReceived=@0xbfffe1c0, canPost=true) at dcopclient.cpp:520 #41 0x0048be2a in DCOPProcessMessage (iceConn=0x809fcc0, clientObject=0x80a3dc8, opcode=2, length=544, replyWait=0x0, replyWaitRet=0xbfffe214) at dcopclient.cpp:432 #42 0x00498e14 in KDE_IceProcessMessages (iceConn=0x809fcc0, replyWait=0x0, replyReadyRet=0x0) at process.c:326 #43 0x0047c6df in DCOPClient::processSocketData (this=0x809bff0, fd=12) at dcopclient.cpp:2014 #44 0x0048bb34 in DCOPClient::qt_invoke (this=0x809bff0, _id=2, _o=0xbfffe36c) at ./dcopclient.moc:176 #45 0x022b0e4a in QObject::activate_signal (this=0x809f670, clist=0x809f8e0, o=0xbfffe36c) at kernel/qobject.cpp:2359 #46 0x022b2c43 in QObject::activate_signal (this=0x809f670, signal=2, param=12) at kernel/qobject.cpp:2452 #47 0x0264a6c0 in QSocketNotifier::activated (this=0x809f670, t0=12) at .moc/release-shared-mt/moc_qsocketnotifier.cpp:85 #48 0x022d3267 in QSocketNotifier::event (this=0x809f670, e=0xbfffe6a8) at kernel/qsocketnotifier.cpp:261 #49 0x02247f75 in QApplication::internalNotify (this=0xbffff170, receiver=0x809f670, e=0xbfffe6a8) at kernel/qapplication.cpp:2638 #50 0x022490c6 in QApplication::notify (this=0xbffff170, receiver=0x809f670, e=0xbfffe6a8) at kernel/qapplication.cpp:2375 #51 0x02bf1262 in KApplication::notify (this=0xbffff170, receiver=0x809f670, event=0xbfffe6a8) at kapplication.cpp:550 #52 0x0223b961 in QApplication::sendEvent () at kernel/qapplication.h:523 #53 QEventLoop::activateSocketNotifiers (this=0x8099110) at kernel/qeventloop_unix.cpp:581 #54 0x021f0aa3 in QEventLoop::processEvents (this=0x8099110, flags=4) at kernel/qeventloop_x11.cpp:386 #55 0x02262630 in QEventLoop::enterLoop (this=0x8099110) at kernel/qeventloop.cpp:201 #56 0x022624f6 in QEventLoop::exec (this=0x8099110) at kernel/qeventloop.cpp:148 #57 0x0224864f in QApplication::exec (this=0xbffff170) at kernel/qapplication.cpp:2761 #58 0x080539eb in main (argc=1, argv=0xbffff2f4) at main.cpp:854 Thread 2: #0 0x005b0bc0 in KstVector::resize (this=0x8668d10, sz=62412, reinit=true) at kstvector.cpp:445 #1 0x005b9e0d in KstRVector::doUpdate (this=0x8668d10, force=false) at kstrvector.cpp:629 #2 0x005ba4ac in KstRVector::update (this=0x8668d10, update_counter=9) at kstrvector.cpp:459 #3 0x009dad42 in KstVCurve::update (this=0x866ba28, update_counter=9) at kstvcurve.cpp:249 #4 0x00cdd5c2 in UpdateThread::doUpdates (this=0x858e748, force=false, gotData=0xb7b1633b) at updatethread.cpp:212 #5 0x00cdedc7 in UpdateThread::run (this=0x858e748) at updatethread.cpp:114 #6 0x022414bc in QThreadInstance::start (_arg=0x85900c4) at kernel/qthread_unix.cpp:122 #7 0x0021251f in start_thread (arg=0xb7b16b90) at pthread_create.c:297 #8 0x010de04e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130
Hi Michael, It seems that the problem is that two different curves are using the same vector, so the additional lock I put in doesn't help in this slightly more unusual case. I'll work out where best tio put a lock that encompasses this situtation. You seem to have a real aptitude for finding obscure race conditions. Many thnaks, Andrew ----- Original Message ----- From: "Michael Vincent" <bug.zilla.vynce@neverbox.com> To: <arwalker@sumusltd.com> Sent: Thursday, October 01, 2009 11:01 AM Subject: [Bug 208832] Segfault while simultaneously reading and plotting data > https://bugs.kde.org/show_bug.cgi?id=208832 > > > > > > --- Comment #5 from Michael Vincent <bug zilla vynce neverbox com> > 2009-10-01 20:00:55 --- > Doh, I spoke too soon. It's still segfaulting occasionally for me. It does > seem > to be less frequent now though. The backtraces look identical to me. > > Program received signal SIGSEGV, Segmentation fault. > 0x005af59e in KstVector::interpolate (this=0x8668d10, in_i=27082, > ns_i=46809) > at kstvector.cpp:202 > 202 GENERATE_INTERPOLATION > > > Thread 1: > > #0 0x005af59e in KstVector::interpolate (this=0x8668d10, in_i=27082, > ns_i=46809) at kstvector.cpp:202 > #1 0x009de84b in KstVCurve::paint (this=0x88348b8, context=@0xbfffc9f4) > at kstvcurve.cpp:1475 > #2 0x00bf0b68 in Kst2DPlot::draw (this=0x8870360, p=@0xbfffcd20) > at kst2dplot.cpp:2903 > #3 0x00bf13b6 in Kst2DPlot::draw (this=0x8870360) at kst2dplot.cpp:2737 > #4 0x00bf148c in Kst2DPlot::updateSelf (this=0x8870360) at > kst2dplot.cpp:2661 > #5 0x00c388e5 in KstViewObject::paintUpdate (this=0x8870360) > at kstviewobject.cpp:426 > #6 0x00c3b837 in KstViewObject::paint (this=0x8870360, p=@0xbfffd028, > bounds=@0xbfffcfc8) at kstviewobject.cpp:340 > #7 0x00c3bb44 in KstViewObject::paint (this=0x84ca678, p=@0xbfffd028, > bounds=@0xbfffd198) at kstviewobject.cpp:373 > #8 0x00c5a05f in KstTopLevelView::paint (this=0x84ca678, p=@0xbfffd028, > bounds=@0xbfffd198) at ksttoplevelview.cpp:190 > #9 0x00c5130f in KstTopLevelView::paint (this=0x84ca678, > type=KstPainter::P_PAINT, bounds=@0xbfffd198) at > ksttoplevelview.cpp:209 > #10 0x00c51442 in KstTopLevelView::paint (this=0x84ca678, > type=KstPainter::P_PAINT) at ksttoplevelview.cpp:199 > #11 0x00d52199 in KstApp::paintAll (this=0x80b7a50, > pt=KstPainter::P_PAINT) > at kst.cpp:1970 > #12 0x0124de62 in KstBindCurveCollection::append (this=0xb5bfa188, > exec=0xbfffd778, args=@0xbfffd374) at bind_curvecollection.cpp:155 > #13 0x0124818e in KstBindCollection::call (this=0x8852cf0, > exec=0xbfffd778, > self=@0xbfffd380, args=@0xbfffd374) at bind_collection.cpp:116 > #14 0x053e7cb9 in KJS::Object::call (this=0xbfffd398, exec=0xbfffd778, > thisObj=@0xbfffd380, args=@0xbfffd374) at object.cpp:73 > #15 0x05401593 in KJS::FunctionCallNode::evaluate (this=0x82e4838, > exec=0xbfffd778) at nodes.cpp:870 > #16 0x053ff006 in KJS::ExprStatementNode::execute (this=0x82e4850, > exec=0xbfffd778) at nodes.cpp:1980 > #17 0x053fd638 in KJS::SourceElementsNode::execute (this=0x8303ad8, > exec=0xbfffd778) at nodes.cpp:3114 > #18 0x053f87a9 in KJS::BlockNode::execute (this=0x84b9fb0, > exec=0xbfffd778) > at nodes.cpp:1942 > #19 0x053fe10c in KJS::ForNode::execute (this=0x84b8438, exec=0xbfffd778) > at nodes.cpp:2199 > #20 0x053fd638 in KJS::SourceElementsNode::execute (this=0x84d5988, > exec=0xbfffd778) at nodes.cpp:3114 > #21 0x053f87a9 in KJS::BlockNode::execute (this=0x848ca80, > exec=0xbfffd778) > at nodes.cpp:1942 > #22 0x05401f9d in KJS::InterpreterImp::evaluate (this=0x8429b20, > code=@0xbfffd834, thisV=@0xbfffd838) at internal.cpp:904 > #23 0x0540237a in KJS::Interpreter::evaluate (this=0x8471490, > code=@0xbfffd834, thisV=@0xbfffd838) at interpreter.cpp:166 > #24 0x012cc227 in KJSEmbed::KJSEmbedPart::execute (this=0x83214b0, > result=@0x8321544, script=@0xbfffd888, self=@0xbfffd90c) > at kjsembedpart.cpp:262 > #25 0x012ca76c in KJSEmbed::KJSEmbedPart::execute (this=0x83214b0, > script=@0xbfffd888, self=@0xbfffd90c) at kjsembedpart.cpp:256 > #26 0x012cd499 in KJSEmbed::KJSEmbedPart::runFile (this=0x83214b0, > name=@0xbfffd91c, self=@0xbfffd90c) at kjsembedpart.cpp:294 > #27 0x01220021 in KstBindKst::loadScript (this=0x865e7e8, exec=0xbfffdc98, > args=@0xbfffda14) at bind_kst.cpp:207 > #28 0x0121f47e in KstBindKst::call (this=0x865e858, exec=0xbfffdc98, > self=@0xbfffda20, args=@0xbfffda14) at bind_kst.cpp:182 > #29 0x053e7cb9 in KJS::Object::call (this=0xbfffda38, exec=0xbfffdc98, > thisObj=@0xbfffda20, args=@0xbfffda14) at object.cpp:73 > #30 0x05401593 in KJS::FunctionCallNode::evaluate (this=0x844e0e8, > exec=0xbfffdc98) at nodes.cpp:870 > #31 0x053ff006 in KJS::ExprStatementNode::execute (this=0x822db20, > exec=0xbfffdc98) at nodes.cpp:1980 > #32 0x053fd638 in KJS::SourceElementsNode::execute (this=0x8158030, > exec=0xbfffdc98) at nodes.cpp:3114 > #33 0x053f87a9 in KJS::BlockNode::execute (this=0x827ce48, > exec=0xbfffdc98) > at nodes.cpp:1942 > #34 0x05401f9d in KJS::InterpreterImp::evaluate (this=0x8429b20, > code=@0xbfffdd54, thisV=@0xbfffdd58) at internal.cpp:904 > #35 0x0540237a in KJS::Interpreter::evaluate (this=0x8471490, > code=@0xbfffdd54, thisV=@0xbfffdd58) at interpreter.cpp:166 > #36 0x012cc227 in KJSEmbed::KJSEmbedPart::execute (this=0x83214b0, > result=@0xbfffdda8, script=@0xbfffde84, self=@0xbfffdde0) > at kjsembedpart.cpp:262 > #37 0x01203fd3 in JSIfaceImpl::evaluate (this=0x85e8338, > script=@0xbfffde84) > at jsiface_impl.cpp:50 > #38 0x012c86ad in JSIface::process (this=0x85e8338, fun=@0xbfffe0e4, > data=@0xbfffe0dc, replyType=@0xbfffe0d4, replyData=@0xbfffe0cc) > at jsiface_skel.cpp:33 > #39 0x00485f8e in DCOPClient::receive (this=0x809bff0, objId=@0xbfffe0ec, > fun=@0xbfffe0e4, data=@0xbfffe0dc, replyType=@0xbfffe0d4, > replyData=@0xbfffe0cc) at dcopclient.cpp:1643 > #40 0x0048b3d1 in DCOPProcessInternal (d=0x80a3dc8, opcode=2, key=69, > dataReceived=@0xbfffe1c0, canPost=true) at dcopclient.cpp:520 > #41 0x0048be2a in DCOPProcessMessage (iceConn=0x809fcc0, > clientObject=0x80a3dc8, opcode=2, length=544, replyWait=0x0, > replyWaitRet=0xbfffe214) at dcopclient.cpp:432 > #42 0x00498e14 in KDE_IceProcessMessages (iceConn=0x809fcc0, > replyWait=0x0, > replyReadyRet=0x0) at process.c:326 > #43 0x0047c6df in DCOPClient::processSocketData (this=0x809bff0, fd=12) > at dcopclient.cpp:2014 > #44 0x0048bb34 in DCOPClient::qt_invoke (this=0x809bff0, _id=2, > _o=0xbfffe36c) > at ./dcopclient.moc:176 > #45 0x022b0e4a in QObject::activate_signal (this=0x809f670, > clist=0x809f8e0, > o=0xbfffe36c) at kernel/qobject.cpp:2359 > #46 0x022b2c43 in QObject::activate_signal (this=0x809f670, signal=2, > param=12) > at kernel/qobject.cpp:2452 > #47 0x0264a6c0 in QSocketNotifier::activated (this=0x809f670, t0=12) > at .moc/release-shared-mt/moc_qsocketnotifier.cpp:85 > #48 0x022d3267 in QSocketNotifier::event (this=0x809f670, e=0xbfffe6a8) > at kernel/qsocketnotifier.cpp:261 > #49 0x02247f75 in QApplication::internalNotify (this=0xbffff170, > receiver=0x809f670, e=0xbfffe6a8) at kernel/qapplication.cpp:2638 > #50 0x022490c6 in QApplication::notify (this=0xbffff170, > receiver=0x809f670, > e=0xbfffe6a8) at kernel/qapplication.cpp:2375 > #51 0x02bf1262 in KApplication::notify (this=0xbffff170, > receiver=0x809f670, > event=0xbfffe6a8) at kapplication.cpp:550 > #52 0x0223b961 in QApplication::sendEvent () at kernel/qapplication.h:523 > #53 QEventLoop::activateSocketNotifiers (this=0x8099110) > at kernel/qeventloop_unix.cpp:581 > #54 0x021f0aa3 in QEventLoop::processEvents (this=0x8099110, flags=4) > at kernel/qeventloop_x11.cpp:386 > #55 0x02262630 in QEventLoop::enterLoop (this=0x8099110) > at kernel/qeventloop.cpp:201 > #56 0x022624f6 in QEventLoop::exec (this=0x8099110) > at kernel/qeventloop.cpp:148 > #57 0x0224864f in QApplication::exec (this=0xbffff170) > at kernel/qapplication.cpp:2761 > #58 0x080539eb in main (argc=1, argv=0xbffff2f4) at main.cpp:854 > > > Thread 2: > > #0 0x005b0bc0 in KstVector::resize (this=0x8668d10, sz=62412, > reinit=true) > at kstvector.cpp:445 > #1 0x005b9e0d in KstRVector::doUpdate (this=0x8668d10, force=false) > at kstrvector.cpp:629 > #2 0x005ba4ac in KstRVector::update (this=0x8668d10, update_counter=9) > at kstrvector.cpp:459 > #3 0x009dad42 in KstVCurve::update (this=0x866ba28, update_counter=9) > at kstvcurve.cpp:249 > #4 0x00cdd5c2 in UpdateThread::doUpdates (this=0x858e748, force=false, > gotData=0xb7b1633b) at updatethread.cpp:212 > #5 0x00cdedc7 in UpdateThread::run (this=0x858e748) at > updatethread.cpp:114 > #6 0x022414bc in QThreadInstance::start (_arg=0x85900c4) > at kernel/qthread_unix.cpp:122 > #7 0x0021251f in start_thread (arg=0xb7b16b90) at pthread_create.c:297 > #8 0x010de04e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130 > > -- > Configure bugmail: https://bugs.kde.org/userprefs.cgi?tab=email > ------- You are receiving this mail because: ------- > You are on the CC list for the bug. >
SVN commit 1030160 by arwalker: CCBUG:208832 allow for possibility that vector being resized is also being painted, possibly within a different parent curve M +4 -0 libkst/kstvector.cpp M +0 -2 libkstapp/kst2dplot.cpp M +29 -0 libkstmath/kstvcurve.cpp WebSVN link: http://websvn.kde.org/?view=rev&revision=1030160
Hi Michael, I've checked in what I hope is a better fix. It would be much appreciated if you could run the same tests again. Andrew ----- Original Message ----- From: "Michael Vincent" <bug.zilla.vynce@neverbox.com> To: <arwalker@sumusltd.com> Sent: Thursday, October 01, 2009 11:01 AM Subject: [Bug 208832] Segfault while simultaneously reading and plotting data > https://bugs.kde.org/show_bug.cgi?id=208832 > > > > > > --- Comment #5 from Michael Vincent <bug zilla vynce neverbox com> > 2009-10-01 20:00:55 --- > Doh, I spoke too soon. It's still segfaulting occasionally for me. It does > seem > to be less frequent now though. The backtraces look identical to me. > > Program received signal SIGSEGV, Segmentation fault. > 0x005af59e in KstVector::interpolate (this=0x8668d10, in_i=27082, > ns_i=46809) > at kstvector.cpp:202 > 202 GENERATE_INTERPOLATION > > > Thread 1: > > #0 0x005af59e in KstVector::interpolate (this=0x8668d10, in_i=27082, > ns_i=46809) at kstvector.cpp:202 > #1 0x009de84b in KstVCurve::paint (this=0x88348b8, context=@0xbfffc9f4) > at kstvcurve.cpp:1475 > #2 0x00bf0b68 in Kst2DPlot::draw (this=0x8870360, p=@0xbfffcd20) > at kst2dplot.cpp:2903 > #3 0x00bf13b6 in Kst2DPlot::draw (this=0x8870360) at kst2dplot.cpp:2737 > #4 0x00bf148c in Kst2DPlot::updateSelf (this=0x8870360) at > kst2dplot.cpp:2661 > #5 0x00c388e5 in KstViewObject::paintUpdate (this=0x8870360) > at kstviewobject.cpp:426 > #6 0x00c3b837 in KstViewObject::paint (this=0x8870360, p=@0xbfffd028, > bounds=@0xbfffcfc8) at kstviewobject.cpp:340 > #7 0x00c3bb44 in KstViewObject::paint (this=0x84ca678, p=@0xbfffd028, > bounds=@0xbfffd198) at kstviewobject.cpp:373 > #8 0x00c5a05f in KstTopLevelView::paint (this=0x84ca678, p=@0xbfffd028, > bounds=@0xbfffd198) at ksttoplevelview.cpp:190 > #9 0x00c5130f in KstTopLevelView::paint (this=0x84ca678, > type=KstPainter::P_PAINT, bounds=@0xbfffd198) at > ksttoplevelview.cpp:209 > #10 0x00c51442 in KstTopLevelView::paint (this=0x84ca678, > type=KstPainter::P_PAINT) at ksttoplevelview.cpp:199 > #11 0x00d52199 in KstApp::paintAll (this=0x80b7a50, > pt=KstPainter::P_PAINT) > at kst.cpp:1970 > #12 0x0124de62 in KstBindCurveCollection::append (this=0xb5bfa188, > exec=0xbfffd778, args=@0xbfffd374) at bind_curvecollection.cpp:155 > #13 0x0124818e in KstBindCollection::call (this=0x8852cf0, > exec=0xbfffd778, > self=@0xbfffd380, args=@0xbfffd374) at bind_collection.cpp:116 > #14 0x053e7cb9 in KJS::Object::call (this=0xbfffd398, exec=0xbfffd778, > thisObj=@0xbfffd380, args=@0xbfffd374) at object.cpp:73 > #15 0x05401593 in KJS::FunctionCallNode::evaluate (this=0x82e4838, > exec=0xbfffd778) at nodes.cpp:870 > #16 0x053ff006 in KJS::ExprStatementNode::execute (this=0x82e4850, > exec=0xbfffd778) at nodes.cpp:1980 > #17 0x053fd638 in KJS::SourceElementsNode::execute (this=0x8303ad8, > exec=0xbfffd778) at nodes.cpp:3114 > #18 0x053f87a9 in KJS::BlockNode::execute (this=0x84b9fb0, > exec=0xbfffd778) > at nodes.cpp:1942 > #19 0x053fe10c in KJS::ForNode::execute (this=0x84b8438, exec=0xbfffd778) > at nodes.cpp:2199 > #20 0x053fd638 in KJS::SourceElementsNode::execute (this=0x84d5988, > exec=0xbfffd778) at nodes.cpp:3114 > #21 0x053f87a9 in KJS::BlockNode::execute (this=0x848ca80, > exec=0xbfffd778) > at nodes.cpp:1942 > #22 0x05401f9d in KJS::InterpreterImp::evaluate (this=0x8429b20, > code=@0xbfffd834, thisV=@0xbfffd838) at internal.cpp:904 > #23 0x0540237a in KJS::Interpreter::evaluate (this=0x8471490, > code=@0xbfffd834, thisV=@0xbfffd838) at interpreter.cpp:166 > #24 0x012cc227 in KJSEmbed::KJSEmbedPart::execute (this=0x83214b0, > result=@0x8321544, script=@0xbfffd888, self=@0xbfffd90c) > at kjsembedpart.cpp:262 > #25 0x012ca76c in KJSEmbed::KJSEmbedPart::execute (this=0x83214b0, > script=@0xbfffd888, self=@0xbfffd90c) at kjsembedpart.cpp:256 > #26 0x012cd499 in KJSEmbed::KJSEmbedPart::runFile (this=0x83214b0, > name=@0xbfffd91c, self=@0xbfffd90c) at kjsembedpart.cpp:294 > #27 0x01220021 in KstBindKst::loadScript (this=0x865e7e8, exec=0xbfffdc98, > args=@0xbfffda14) at bind_kst.cpp:207 > #28 0x0121f47e in KstBindKst::call (this=0x865e858, exec=0xbfffdc98, > self=@0xbfffda20, args=@0xbfffda14) at bind_kst.cpp:182 > #29 0x053e7cb9 in KJS::Object::call (this=0xbfffda38, exec=0xbfffdc98, > thisObj=@0xbfffda20, args=@0xbfffda14) at object.cpp:73 > #30 0x05401593 in KJS::FunctionCallNode::evaluate (this=0x844e0e8, > exec=0xbfffdc98) at nodes.cpp:870 > #31 0x053ff006 in KJS::ExprStatementNode::execute (this=0x822db20, > exec=0xbfffdc98) at nodes.cpp:1980 > #32 0x053fd638 in KJS::SourceElementsNode::execute (this=0x8158030, > exec=0xbfffdc98) at nodes.cpp:3114 > #33 0x053f87a9 in KJS::BlockNode::execute (this=0x827ce48, > exec=0xbfffdc98) > at nodes.cpp:1942 > #34 0x05401f9d in KJS::InterpreterImp::evaluate (this=0x8429b20, > code=@0xbfffdd54, thisV=@0xbfffdd58) at internal.cpp:904 > #35 0x0540237a in KJS::Interpreter::evaluate (this=0x8471490, > code=@0xbfffdd54, thisV=@0xbfffdd58) at interpreter.cpp:166 > #36 0x012cc227 in KJSEmbed::KJSEmbedPart::execute (this=0x83214b0, > result=@0xbfffdda8, script=@0xbfffde84, self=@0xbfffdde0) > at kjsembedpart.cpp:262 > #37 0x01203fd3 in JSIfaceImpl::evaluate (this=0x85e8338, > script=@0xbfffde84) > at jsiface_impl.cpp:50 > #38 0x012c86ad in JSIface::process (this=0x85e8338, fun=@0xbfffe0e4, > data=@0xbfffe0dc, replyType=@0xbfffe0d4, replyData=@0xbfffe0cc) > at jsiface_skel.cpp:33 > #39 0x00485f8e in DCOPClient::receive (this=0x809bff0, objId=@0xbfffe0ec, > fun=@0xbfffe0e4, data=@0xbfffe0dc, replyType=@0xbfffe0d4, > replyData=@0xbfffe0cc) at dcopclient.cpp:1643 > #40 0x0048b3d1 in DCOPProcessInternal (d=0x80a3dc8, opcode=2, key=69, > dataReceived=@0xbfffe1c0, canPost=true) at dcopclient.cpp:520 > #41 0x0048be2a in DCOPProcessMessage (iceConn=0x809fcc0, > clientObject=0x80a3dc8, opcode=2, length=544, replyWait=0x0, > replyWaitRet=0xbfffe214) at dcopclient.cpp:432 > #42 0x00498e14 in KDE_IceProcessMessages (iceConn=0x809fcc0, > replyWait=0x0, > replyReadyRet=0x0) at process.c:326 > #43 0x0047c6df in DCOPClient::processSocketData (this=0x809bff0, fd=12) > at dcopclient.cpp:2014 > #44 0x0048bb34 in DCOPClient::qt_invoke (this=0x809bff0, _id=2, > _o=0xbfffe36c) > at ./dcopclient.moc:176 > #45 0x022b0e4a in QObject::activate_signal (this=0x809f670, > clist=0x809f8e0, > o=0xbfffe36c) at kernel/qobject.cpp:2359 > #46 0x022b2c43 in QObject::activate_signal (this=0x809f670, signal=2, > param=12) > at kernel/qobject.cpp:2452 > #47 0x0264a6c0 in QSocketNotifier::activated (this=0x809f670, t0=12) > at .moc/release-shared-mt/moc_qsocketnotifier.cpp:85 > #48 0x022d3267 in QSocketNotifier::event (this=0x809f670, e=0xbfffe6a8) > at kernel/qsocketnotifier.cpp:261 > #49 0x02247f75 in QApplication::internalNotify (this=0xbffff170, > receiver=0x809f670, e=0xbfffe6a8) at kernel/qapplication.cpp:2638 > #50 0x022490c6 in QApplication::notify (this=0xbffff170, > receiver=0x809f670, > e=0xbfffe6a8) at kernel/qapplication.cpp:2375 > #51 0x02bf1262 in KApplication::notify (this=0xbffff170, > receiver=0x809f670, > event=0xbfffe6a8) at kapplication.cpp:550 > #52 0x0223b961 in QApplication::sendEvent () at kernel/qapplication.h:523 > #53 QEventLoop::activateSocketNotifiers (this=0x8099110) > at kernel/qeventloop_unix.cpp:581 > #54 0x021f0aa3 in QEventLoop::processEvents (this=0x8099110, flags=4) > at kernel/qeventloop_x11.cpp:386 > #55 0x02262630 in QEventLoop::enterLoop (this=0x8099110) > at kernel/qeventloop.cpp:201 > #56 0x022624f6 in QEventLoop::exec (this=0x8099110) > at kernel/qeventloop.cpp:148 > #57 0x0224864f in QApplication::exec (this=0xbffff170) > at kernel/qapplication.cpp:2761 > #58 0x080539eb in main (argc=1, argv=0xbffff2f4) at main.cpp:854 > > > Thread 2: > > #0 0x005b0bc0 in KstVector::resize (this=0x8668d10, sz=62412, > reinit=true) > at kstvector.cpp:445 > #1 0x005b9e0d in KstRVector::doUpdate (this=0x8668d10, force=false) > at kstrvector.cpp:629 > #2 0x005ba4ac in KstRVector::update (this=0x8668d10, update_counter=9) > at kstrvector.cpp:459 > #3 0x009dad42 in KstVCurve::update (this=0x866ba28, update_counter=9) > at kstvcurve.cpp:249 > #4 0x00cdd5c2 in UpdateThread::doUpdates (this=0x858e748, force=false, > gotData=0xb7b1633b) at updatethread.cpp:212 > #5 0x00cdedc7 in UpdateThread::run (this=0x858e748) at > updatethread.cpp:114 > #6 0x022414bc in QThreadInstance::start (_arg=0x85900c4) > at kernel/qthread_unix.cpp:122 > #7 0x0021251f in start_thread (arg=0xb7b16b90) at pthread_create.c:297 > #8 0x010de04e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130 > > -- > Configure bugmail: https://bugs.kde.org/userprefs.cgi?tab=email > ------- You are receiving this mail because: ------- > You are on the CC list for the bug. >
Your new fix is working great! No crashes so far.
Excellent news. Thanks. Andrew ----- Original Message ----- From: "Michael Vincent" <bug.zilla.vynce@neverbox.com> To: <arwalker@sumusltd.com> Sent: Thursday, October 01, 2009 12:56 PM Subject: [Bug 208832] Segfault while simultaneously reading and plotting data > https://bugs.kde.org/show_bug.cgi?id=208832 > > > > > > --- Comment #9 from Michael Vincent <bug zilla vynce neverbox com> > 2009-10-01 21:56:23 --- > Your new fix is working great! No crashes so far. > > -- > Configure bugmail: https://bugs.kde.org/userprefs.cgi?tab=email > ------- You are receiving this mail because: ------- > You are on the CC list for the bug. >