[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Octave-bug-tracker] [bug #54369] [MXE-Octave] crash on "__octave_link_g
From: |
Markus Mützel |
Subject: |
[Octave-bug-tracker] [bug #54369] [MXE-Octave] crash on "__octave_link_gui_preference__" |
Date: |
Wed, 25 Jul 2018 14:29:30 -0400 (EDT) |
User-agent: |
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0 |
Follow-up Comment #1, bug #54369 (project octave):
With debug symbols, I get the following backtrace:
(gdb) continue
Continuing.
[Thread 17316.0x1d0 exited with code 0]
Thread 13 received signal SIGSEGV, Segmentation fault.
[Switching to Thread 17316.0x46d8]
0x000000000d40f1a2 in QBasicMutex::unlockInternal() ()
from
D:\Repositories\Octave\test\octave-2018-07-25-19-17-w64_debug\octave-2018-07-25-19-17-w64\bin\Qt5Core.dll
(gdb) bt
#0 0x000000000d40f1a2 in QBasicMutex::unlockInternal() ()
from
D:\Repositories\Octave\test\octave-2018-07-25-19-17-w64_debug\octave-2018-07-25-19-17-w64\bin\Qt5Core.dll
#1 0x0000000064f16df6 in octave::octave_qt_link::do_gui_preference
(this=0x3deb2730, key=..., value=...)
at
/home/osboxes/Documents/Repositories/Octave/mxe-octave-3/tmp-default-octave/octave-5.0.0/libgui/src/octave-qt-link.cc:588
#2 0x000000000e9f3865 in octave_link::gui_preference (value=..., key=...)
at
/home/osboxes/Documents/Repositories/Octave/mxe-octave-3/tmp-default-octave/octave-5.0.0/libinterp/corefcn/octave-link.h:377
#3 F__octave_link_gui_preference__ (args=...)
at
/home/osboxes/Documents/Repositories/Octave/mxe-octave-3/tmp-default-octave/octave-5.0.0/libinterp/corefcn/octave-link.cc:403
#4 0x000000000e5c69ff in octave_builtin::call (this=0x410366c0, tw=...,
nargout=1, args=...)
at
/home/osboxes/Documents/Repositories/Octave/mxe-octave-3/tmp-default-octave/octave-5.0.0/libinterp/octave-value/ov-builtin.cc:65
#5 0x000000000e6d447a in octave::tree_evaluator::visit_index_expression
(this=0x40c20b90, idx_expr=...)
at
/home/osboxes/Documents/Repositories/Octave/mxe-octave-3/tmp-default-octave/octave-5.0.0/libinterp/parse-tree/pt-eval.cc:1875
#6 0x000000000ec16d76 in octave::tree_evaluator::evaluate (this=0x40c20b90,
expr=0x3debb6f0, nargout=<optimized out>)
at
/home/osboxes/Documents/Repositories/Octave/mxe-octave-3/tmp-default-octave/octave-5.0.0/libinterp/parse-tree/pt-eval.h:302
#7 0x000000000e6d5875 in octave::tree_evaluator::visit_simple_assignment
(this=0x40c20b90, expr=...)
at
/home/osboxes/Documents/Repositories/Octave/mxe-octave-3/tmp-default-octave/octave-5.0.0/libinterp/parse-tree/pt-eval.cc:2528
#8 0x000000000ec16d76 in octave::tree_evaluator::evaluate (this=0x40c20b90,
expr=0x3dde0b20, nargout=<optimized out>)
at
/home/osboxes/Documents/Repositories/Octave/mxe-octave-3/tmp-default-octave/octave-5.0.0/libinterp/parse-tree/pt-eval.h:302
#9 0x000000000e6d161d in octave::tree_evaluator::visit_statement
(this=0x40c20b90, stmt=...)
at
/home/osboxes/Documents/Repositories/Octave/mxe-octave-3/tmp-default-octave/octave-5.0.0/libinterp/parse-tree/pt-eval.cc:2642
#10 0x000000000e6c78fb in octave::tree_statement::accept (tw=...,
this=0x3dde0a20)
at
/home/osboxes/Documents/Repositories/Octave/mxe-octave-3/tmp-default-octave/octave-5.0.0/libinterp/parse-tree/pt-stmt.h:115
#11 octave::tree_evaluator::visit_statement_list (this=0x40c20b90, lst=...)
at
/home/osboxes/Documents/Repositories/Octave/mxe-octave-3/tmp-default-octave/octave-5.0.0/libinterp/parse-tree/pt-eval.cc:2711
#12 0x000000000e6cad4a in octave::tree_statement_list::accept (tw=...,
this=<optimized out>)
at
/home/osboxes/Documents/Repositories/Octave/mxe-octave-3/tmp-default-octave/octave-5.0.0/libinterp/parse-tree/pt-stmt.h:190
#13 octave::tree_evaluator::repl (address@hidden,
interactive=true)
at
/home/osboxes/Documents/Repositories/Octave/mxe-octave-3/tmp-default-octave/octave-5.0.0/libinterp/parse-tree/pt-eval.cc:105
#14 0x000000000e92e64e in octave::interpreter::main_loop
(address@hidden)
---Type <return> to continue, or q <return> to quit---
at
/home/osboxes/Documents/Repositories/Octave/mxe-octave-3/tmp-default-octave/octave-5.0.0/libinterp/corefcn/interpreter.cc:949
#15 0x000000000e936ada in octave::interpreter::main_loop (this=0x40c20040)
at
/home/osboxes/Documents/Repositories/Octave/mxe-octave-3/tmp-default-octave/octave-5.0.0/libinterp/corefcn/interpreter.cc:932
#16 octave::interpreter::execute (address@hidden)
at
/home/osboxes/Documents/Repositories/Octave/mxe-octave-3/tmp-default-octave/octave-5.0.0/libinterp/corefcn/interpreter.cc:694
#17 0x0000000064f090f6 in octave::octave_interpreter::execute
(this=0x375d65f0)
at
/home/osboxes/Documents/Repositories/Octave/mxe-octave-3/tmp-default-octave/octave-5.0.0/libgui/src/main-window.cc:141
#18 0x0000000064f5e1a5 in octave::octave_interpreter::qt_static_metacall
(_o=0x419bb530, _c=QMetaObject::RegisterMethodArgumentMetaType, _id=-1048576,
_a=0x6b0d46 <Curl_ftp_parselist+950>) at libgui/src/moc-main-window.cc:89
#19 0x000000000d5f5d6a in QObject::event(QEvent*) ()
from
D:\Repositories\Octave\test\octave-2018-07-25-19-17-w64_debug\octave-2018-07-25-19-17-w64\bin\Qt5Core.dll
#20 0x000000000d967c5c in QApplicationPrivate::notify_helper(QObject*,
QEvent*) ()
from
D:\Repositories\Octave\test\octave-2018-07-25-19-17-w64_debug\octave-2018-07-25-19-17-w64\bin\Qt5Widgets.dll
#21 0x000000000d96ede0 in QApplication::notify(QObject*, QEvent*) ()
from
D:\Repositories\Octave\test\octave-2018-07-25-19-17-w64_debug\octave-2018-07-25-19-17-w64\bin\Qt5Widgets.dll
#22 0x000000000d5c9e38 in QCoreApplication::notifyInternal2(QObject*, QEvent*)
()
from
D:\Repositories\Octave\test\octave-2018-07-25-19-17-w64_debug\octave-2018-07-25-19-17-w64\bin\Qt5Core.dll
#23 0x000000000d5d0089 in QCoreApplicationPrivate::sendPostedEvents(QObject*,
int, QThreadData*) ()
from
D:\Repositories\Octave\test\octave-2018-07-25-19-17-w64_debug\octave-2018-07-25-19-17-w64\bin\Qt5Core.dll
#24 0x000000000d6220e8 in QEventDispatcherWin32Private::sendTimerEvent(int)
()
from
D:\Repositories\Octave\test\octave-2018-07-25-19-17-w64_debug\octave-2018-07-25-19-17-w64\bin\Qt5Core.dll
#25 0x00007ffd13d36cc1 in USER32!CallWindowProcW () from
C:\WINDOWS\System32\user32.dll
#26 0x00007ffd13d36693 in USER32!DispatchMessageW () from
C:\WINDOWS\System32\user32.dll
#27 0x000000000d62183b in
QEventDispatcherWin32::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)
()
from
D:\Repositories\Octave\test\octave-2018-07-25-19-17-w64_debug\octave-2018-07-25-19-17-w64\bin\Qt5Core.dll
#28 0x000000000d5c86ff in
QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) ()
from
D:\Repositories\Octave\test\octave-2018-07-25-19-17-w64_debug\octave-2018-07-25-19-17-w64\bin\Qt5Core.dll
#29 0x000000000d413c19 in QThread::run() ()
from
D:\Repositories\Octave\test\octave-2018-07-25-19-17-w64_debug\octave-2018-07-25-19-17-w64\bin\Qt5Core.dll
---Type <return> to continue, or q <return> to quit---
#30 0x000000000d41ea17 in QtPrivate::ResultStoreBase::addResults(int, void
const*, int, int) ()
from
D:\Repositories\Octave\test\octave-2018-07-25-19-17-w64_debug\octave-2018-07-25-19-17-w64\bin\Qt5Core.dll
#31 0x00007ffd15ea3034 in KERNEL32!BaseThreadInitThunk () from
C:\WINDOWS\System32\kernel32.dll
#32 0x00007ffd16091431 in ntdll!RtlUserThreadStart () from
C:\WINDOWS\SYSTEM32\ntdll.dll
#33 0x0000000000000000 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
(gdb)
That means it segfault on the unlock here:
std::string octave_qt_link::do_gui_preference (const std::string& key,
const std::string& value)
{
QMutex wait_for_gui;
QString pref_value;
// Emit the signal for changing or getting a preference
emit gui_preference_signal (QString::fromStdString (key),
QString::fromStdString (value),
&wait_for_gui, &pref_value);
// Unlock and lock the mutex (make sure it is locked without being
blocked)
wait_for_gui.unlock ();
wait_for_gui.lock ();
// Try to lock it again, thus waiting for the unlock of the gui after
// reading/changing desired preference. A timeout of 3 s for not being
// blocked forever if something goes wrong
wait_for_gui.tryLock (3000);
return pref_value.toStdString ();
}
I don't know why it is tried to unlock the thread before it is locked in the
next line. And locked again (?) with the next command.
The Qt manual for "unlock" [1] reads: "Unlocking a mutex that is not locked
results in undefined behavior."
So we should probably try and avoid that.
[1]: http://doc.qt.io/qt-5/qmutex.html
_______________________________________________________
Reply to this item at:
<http://savannah.gnu.org/bugs/?54369>
_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/