URI: 
       tMerge branch 'master' of git://gitorious.org/electrum/electrum - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit db0725bdcd278caf05a1f0b878c7c02aa730227b
   DIR parent b0d07ae8c69367afcc7f8149cc931c78bdb5d98d
  HTML Author: thomasv <thomasv@gitorious>
       Date:   Wed, 14 Mar 2012 14:58:42 +0100
       
       Merge branch 'master' of git://gitorious.org/electrum/electrum
       
       Diffstat:
         M server/server.py                    |      23 ++++++++++++++++++-----
       
       1 file changed, 18 insertions(+), 5 deletions(-)
       ---
   DIR diff --git a/server/server.py b/server/server.py
       t@@ -673,6 +673,13 @@ def tcp_server_thread():
                    traceback.print_exc(file=sys.stdout)
        
        
       +def close_session(session_id):
       +    print "lost connection", session_id
       +    sessions.pop(session_id)
       +    if session_id in sessions_sub_numblocks:
       +        sessions_sub_numblocks.remove(session_id)
       +
       +
        # one thread per client. put requests in a queue.
        def tcp_client_thread(ipaddr,conn):
            """ use a persistent connection. put commands in a queue."""
       t@@ -689,9 +696,7 @@ def tcp_client_thread(ipaddr,conn):
                d = conn.recv(1024)
                msg += d
                if not d:
       -            print "lost connection", session_id
       -            sessions.pop(session_id)
       -            sessions_sub_numblocks.remove(session_id)
       +            close_session(session_id)
                    break
        
                while True:
       t@@ -717,6 +722,8 @@ def tcp_client_thread(ipaddr,conn):
        def process_input_queue():
            while not stopping:
                session_id, cmd, data = input_queue.get()
       +        if session_id not in sessions.keys():
       +            continue
                out = None
                if cmd == 'address.subscribe':
                    subscribe_to_address(session_id,data)
       t@@ -726,6 +733,8 @@ def process_input_queue():
                    sessions[session_id]['version'] = data
                elif cmd == 'server.banner':
                    out = json.dumps( { 'method':'server.banner', 'result':config.get('server','banner').replace('\\n','\n') } )
       +        elif cmd == 'server.peers':
       +            out = json.dumps( { 'method':'server.peers', 'result':peer_list.values() } )
                elif cmd == 'address.get_history':
                    address = data
                    out = json.dumps( { 'method':'address.get_history', 'address':address, 'result':store.get_history( address ) } )
       t@@ -744,8 +753,12 @@ def process_output_queue():
                session_id, out = output_queue.get()
                session = sessions.get(session_id)
                if session: 
       -            conn = session.get('conn')
       -            conn.send(out+'\n')
       +            try:
       +                conn = session.get('conn')
       +                conn.send(out+'\n')
       +            except:
       +                close_session(session_id)
       +