octave-bug-tracker
[Top][All Lists]
Advanced

[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/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]