[PySide] Segfault using QScxmlStateMachine.submitEvent(QScxmlEvent)

Alex Blasche alexander.blasche at qt.io
Fri Nov 9 07:53:28 CET 2018


Hi Romain,

please file a bugreport under bugreports.qt.io in the Pyside project. The content for the bug report you already have in your mail. If you happen to have a stack trace, that would be beneficial too.

Alex

________________________________________
From: PySide <pyside-bounces+alexander.blasche=qt.io at qt-project.org> on behalf of Romain LE DISEZ <romain at ledisez.net>
Sent: Thursday, 8 November 2018 9:30:53 PM
To: pyside at qt-project.org
Subject: [PySide] Segfault using QScxmlStateMachine.submitEvent(QScxmlEvent)

Hi all,

I'm very new to Qt as I'm developing my first application with it. I'm trying to use StateChart based on QScxmlStateMachine.

It works fine except in a situation where I get a segfault. If, in the demo code below, you comment the line submitEvent('MY_EVENT') and uncomment the usage of a ScxmlEvent, the event is dispatched then the application segfaults. Output is:
    StateMachine::active: True
    ('MY_EVENT:', (), {})
    Segmentation fault: 11

Am I doing something wrong or is it a bug? How can I provide you useful informations in the latter case. I'm running PySide2 (v5.11.2) on macOS (High Sierra) with Python v2.7.15 (coming from brew).

Thx for your help.


demo.scxml:
    <?xml version="1.0" encoding="UTF-8"?>
    <scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" binding="early" name="demo.scxml">
        <transition type="internal" event="MY_EVENT"/>
        <state id="StateMachine"/>
    </scxml>

demo.py:
    #!/usr/bin/env python

    import sys

    from PySide2.QtCore import QObject, QCoreApplication, SLOT, Slot
    from PySide2.QtScxml import QScxmlStateMachine, QScxmlEvent


    class Backend(QObject):
        def __init__(self, machine):
            super(Backend, self).__init__()
            self.machine = machine
            self.machine.connectToState('StateMachine', self, SLOT('state_machine_active(bool)'))
            self.machine.connectToEvent('MY_EVENT', self, SLOT('my_event()'))

        @Slot(bool)
        def state_machine_active(self, active):
            print('StateMachine::active: %s' % active)
            self.machine.submitEvent('MY_EVENT')
            #ev = QScxmlEvent()
            #ev.setName('MY_EVENT')
            #ev.setEventType(QScxmlEvent.ExternalEvent)
            #self.machine.submitEvent(ev)

        @Slot()
        def my_event(self, *args, **kwargs):
            print('MY_EVENT:', args, kwargs)


    if __name__ == '__main__':
        app = QCoreApplication(sys.argv)

        machine = QScxmlStateMachine.fromFile('demo.scxml')
        b = Backend(machine)
        machine.start()

        sys.exit(app.exec_())

--
Romain

_______________________________________________
PySide mailing list
PySide at qt-project.org
http://lists.qt-project.org/mailman/listinfo/pyside



More information about the PySide mailing list