chiark / gitweb /
crashing and msgs
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 1 Apr 2017 23:31:05 +0000 (00:31 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 1 Apr 2017 23:31:05 +0000 (00:31 +0100)
client
hippotat/__init__.py

diff --git a/client b/client
index 48c4f3f8768aa988483939bcbf04fd0253664feb..e6ea8edfb1b81442e14a7f1adcf21a3269f7c9cc 100755 (executable)
--- a/client
+++ b/client
@@ -145,13 +145,18 @@ def req_ok(req, resp):
 def req_err(req, err):
   # called when the Deferred fails, or (if it completes),
   # later, by ResponsConsumer or ErrorResponsConsumer
-  log_debug(DBG.HTTP_CTRL, 'req_err ' + str(err), idof=req)
-  if isinstance(err, twisted.python.failure.Failure):
-    err = err.getTraceback()
-  print(err, file=sys.stderr)
-  outstanding[req] = 'ERR'
-  log_outstanding()
-  reactor.callLater(c.http_retry, (lambda: req_fin(req)))
+  try:
+    log_debug(DBG.HTTP_CTRL, 'req_err ' + str(err), idof=req)
+    if isinstance(err, twisted.python.failure.Failure):
+      err = err.getTraceback()
+    print('[%#x] %s' % (id(req), err), file=sys.stderr)
+    if not isinstance(outstanding[req], int):
+      raise RuntimeError('[%#x] previously %s' % (id(req), outstanding[req]))
+    outstanding[req] = err
+    log_outstanding()
+    reactor.callLater(c.http_retry, (lambda: req_fin(req)))
+  except Exception as e:
+    crash(traceback.format_exc() + '\n----- handling -----\n' + err)
 
 def req_fin(req):
   del outstanding[req]
index 43f4a49b157329312e64e1a0ee5e559190d15aa4..3e8649ae1e122f7b4252ad4dbc4453e54ffca673 100644 (file)
@@ -49,7 +49,7 @@ log = twisted.logger.Logger()
 def log_debug(dflag, msg, idof=None, d=None):
   #print('---------------->',repr((dflag, msg, idof, d)), file=sys.stderr)
   if idof is not None:
-    msg = '[%d] %s' % (id(idof), msg)
+    msg = '[%#x] %s' % (id(idof), msg)
   if d is not None:
     d = d[0:64]
     d = _hex_codec(d)[0].decode('ascii')
@@ -286,7 +286,8 @@ _crashing = False
 def crash(err):
   global _crashing
   _crashing = True
-  print('CRASH ', err, file=sys.stderr)
+  print('========== CRASH ==========', err,
+        '===========================', file=sys.stderr)
   try: reactor.stop()
   except twisted.internet.error.ReactorNotRunning: pass