Hi all, i'm getting a segmentation fault when using a QThread to run a background task. here is a minimal program reproducing my problem
import sys, time from PyQt4 import QtGui, QtCore app = QtGui.QApplication(sys.argv) win = QtGui.QMainWindow() table = QtGui.QTextEdit() win.setCentralWidget(table) win.show() def update_table(data): table.clear() table.setHtml(data) class workerThread(QtCore.QThread): def __init__(self, r): self.request = r self.result = '' self.signal = QtCore.SIGNAL("thread_done(PyObject*)") QtCore.QThread.__init__(self) def run(self): # simulate a time consuming computation self.result = self.request.replace('e', 'oa'); time.sleep(5) # result ready self.emit(self.signal, self.result) thread = workerThread(u'test') app.connect(thread, QtCore.SIGNAL("thread_done(PyObject*)"), update_table) thread.start() app.exec_() the programs runs just fine, but i get a segmentation fault as soon as i close the window (but not if i do before thread has finished). What's strange is that everything is fine if a don't use unicode strings (i.e replace u'test' with just 'test' or use self.result = str(self.request.replace...) ) Am i doing something wrong, or is this just a bug? python version 2.4.4 pyqt version 4.0.1 debian etch Thanks in advance. P.S. is it required to keep references to emit arguments in the thread class as i've read on this list? why? (i.e. using self.emit(self.signal, self.result) instead of self.emit(QtCore.SIGNAL("thread_done(PyObject*)"), self.request.replace('e', 'oa')) ) _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt