Details
Description
The demo code below generates a segfault with this output:
StateMachine::active: True
('MY_EVENT:', (), {})
Segmentation fault: 11
If you comment the usage QScxmlEvent and just use the submitEvent('MY_EVENT'), it works fine.
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_())