diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index b51c73fc..f3a341df 100755 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -2051,8 +2051,11 @@ class sendDataThread(threading.Thread): shared.printLock.acquire() print 'sendDataThread (associated with', self.HOST,') ID:',id(self), 'shutting down now.' shared.printLock.release() - self.sock.shutdown(socket.SHUT_RDWR) - self.sock.close() + try: + self.sock.shutdown(socket.SHUT_RDWR) + self.sock.close() + except: + pass shared.sendDataQueues.remove(self.mailbox) shared.printLock.acquire() print 'len of sendDataQueues', len(shared.sendDataQueues) @@ -2087,8 +2090,11 @@ class sendDataThread(threading.Thread): self.lastTimeISentData = int(time.time()) except: print 'self.sock.sendall failed' - self.sock.shutdown(socket.SHUT_RDWR) - self.sock.close() + try: + self.sock.shutdown(socket.SHUT_RDWR) + self.sock.close() + except: + pass shared.sendDataQueues.remove(self.mailbox) print 'sendDataThread thread (ID:',str(id(self))+') ending now. Was connected to', self.HOST break @@ -2107,8 +2113,11 @@ class sendDataThread(threading.Thread): self.lastTimeISentData = int(time.time()) except: print 'self.sock.sendall failed' - self.sock.shutdown(socket.SHUT_RDWR) - self.sock.close() + try: + self.sock.shutdown(socket.SHUT_RDWR) + self.sock.close() + except: + pass shared.sendDataQueues.remove(self.mailbox) print 'sendDataThread thread (ID:',str(id(self))+') ending now. Was connected to', self.HOST break @@ -2123,8 +2132,11 @@ class sendDataThread(threading.Thread): self.lastTimeISentData = int(time.time()) except: print 'send pong failed' - self.sock.shutdown(socket.SHUT_RDWR) - self.sock.close() + try: + self.sock.shutdown(socket.SHUT_RDWR) + self.sock.close() + except: + pass shared.sendDataQueues.remove(self.mailbox) print 'sendDataThread thread', self, 'ending now. Was connected to', self.HOST break @@ -2446,7 +2458,15 @@ class sqlThread(threading.Thread): parameters = shared.sqlSubmitQueue.get() #print 'item', item #print 'parameters', parameters - self.cur.execute(item, parameters) + try: + self.cur.execute(item, parameters) + except Exception, err: + shared.printLock.acquire() + sys.stderr.write('\nMajor error occurred when trying to execute a SQL statement within the sqlThread. Please tell Atheros about this error message or post it in the forum! Error occurred while trying to execute statement: "'+str(item) + '" Here are the parameters; you might want to censor this data with asterisks (***) as it can contain private information: '+str(repr(parameters))+'\nHere is the actual error message thrown by the sqlThread: '+ str(err)+'\n') + sys.stderr.write('This program shall now abruptly exit!\n') + shared.printLock.release() + os._exit(0) + shared.sqlReturnQueue.put(self.cur.fetchall()) #shared.sqlSubmitQueue.task_done() diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index 2b68179f..5233a532 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -230,9 +230,6 @@ class MyForm(QtGui.QMainWindow): if isEnabled: status,addressVersionNumber,streamNumber,hash = decodeAddress(addressInKeysFile) - #self.sqlLookup = sqlThread() - #self.sqlLookup.start() - self.ui.tableWidgetSent.keyPressEvent = self.tableWidgetSentKeyPressEvent font = QFont() font.setBold(True) @@ -1744,7 +1741,9 @@ class MyForm(QtGui.QMainWindow): self.ui.textEditInboxMessage.setText("") self.ui.tableWidgetInbox.removeRow(currentRow) self.statusBar().showMessage('Moved items to trash. There is no user interface to view your trash, but it is still on disk if you are desperate to get it back.') + shared.sqlLock.acquire() shared.sqlSubmitQueue.put('commit') + shared.sqlLock.release() if currentRow == 0: self.ui.tableWidgetInbox.selectRow(currentRow) else: @@ -1764,7 +1763,9 @@ class MyForm(QtGui.QMainWindow): self.ui.textEditSentMessage.setPlainText("") self.ui.tableWidgetSent.removeRow(currentRow) self.statusBar().showMessage('Moved items to trash. There is no user interface to view your trash, but it is still on disk if you are desperate to get it back.') + shared.sqlLock.acquire() shared.sqlSubmitQueue.put('commit') + shared.sqlLock.release() if currentRow == 0: self.ui.tableWidgetSent.selectRow(currentRow) else: diff --git a/src/shared.py b/src/shared.py index ed1baf22..a5f635ea 100644 --- a/src/shared.py +++ b/src/shared.py @@ -167,11 +167,12 @@ def doCleanShutdown(): sqlSubmitQueue.put('SELECT address FROM subscriptions') sqlSubmitQueue.put('') sqlReturnQueue.get() + sqlSubmitQueue.put('exit') sqlLock.release() printLock.acquire() print 'Finished flushing inventory.' printLock.release() - sqlSubmitQueue.put('exit') + if safeConfigGetBoolean('bitmessagesettings','daemon'): printLock.acquire()