close stratum connection if get_work fails to let miner know something is wrong inste...
authorForrest Voight <forrest@forre.st>
Thu, 1 Aug 2013 23:46:42 +0000 (19:46 -0400)
committerForrest Voight <forrest@forre.st>
Fri, 2 Aug 2013 00:16:35 +0000 (20:16 -0400)
p2pool/bitcoin/stratum.py

index a396d46..ca2aa94 100644 (file)
@@ -2,15 +2,17 @@ import random
 import sys
 
 from twisted.internet import protocol, reactor
+from twisted.python import log
 
 from p2pool.bitcoin import data as bitcoin_data, getwork
 from p2pool.util import expiring_dict, jsonrpc, pack
 
 
 class StratumRPCMiningProvider(object):
-    def __init__(self, wb, other):
+    def __init__(self, wb, other, transport):
         self.wb = wb
         self.other = other
+        self.transport = transport
         
         self.username = None
         self.handler_map = expiring_dict.ExpiringDict(300)
@@ -32,7 +34,12 @@ class StratumRPCMiningProvider(object):
         reactor.callLater(0, self._send_work)
     
     def _send_work(self):
-        x, got_response = self.wb.get_work(*self.wb.preprocess_request('' if self.username is None else self.username))
+        try:
+            x, got_response = self.wb.get_work(*self.wb.preprocess_request('' if self.username is None else self.username))
+        except:
+            log.err()
+            self.transport.loseConnection()
+            return
         jobid = str(random.randrange(2**128))
         self.other.svc_mining.rpc_set_difficulty(bitcoin_data.target_to_difficulty(x['share_target'])*self.wb.net.DUMB_SCRYPT_DIFF).addErrback(lambda err: None)
         self.other.svc_mining.rpc_notify(
@@ -71,7 +78,7 @@ class StratumRPCMiningProvider(object):
 
 class StratumProtocol(jsonrpc.LineBasedPeer):
     def connectionMade(self):
-        self.svc_mining = StratumRPCMiningProvider(self.factory.wb, self.other)
+        self.svc_mining = StratumRPCMiningProvider(self.factory.wb, self.other, self.transport)
     
     def connectionLost(self, reason):
         self.svc_mining.close()