URI: 
       tsqlite: do not use scoped_session - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 29afe52b4c0e72493ee0c14996fcbde346b1cb64
   DIR parent cab0f7d9e05d7ccd5211eb8b80bd9cfc65b272c3
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Wed,  6 Mar 2019 06:16:52 +0100
       
       sqlite: do not use scoped_session
       
       Diffstat:
         M electrum/lnrouter.py                |      10 ++++------
       
       1 file changed, 4 insertions(+), 6 deletions(-)
       ---
   DIR diff --git a/electrum/lnrouter.py b/electrum/lnrouter.py
       t@@ -69,7 +69,6 @@ def validate_features(features : int):
                    raise UnknownEvenFeatureBits()
        
        Base = declarative_base()
       -session_factory = sessionmaker()
        
        FLAG_DISABLE   = 1 << 1
        FLAG_DIRECTION = 1 << 0
       t@@ -228,10 +227,10 @@ class ChannelDB(PrintError):
                threading.Thread(target=self.sql_thread).start()
        
            def sql_thread(self):
       +        self.sql_thread = threading.currentThread()
                engine = create_engine('sqlite:///' + self.path, pool_reset_on_return=None, poolclass=StaticPool)#, echo=True)
       -        self.DBSession = scoped_session(session_factory)
       -        self.DBSession.remove()
       -        self.DBSession.configure(bind=engine, autoflush=False)
       +        DBSession = sessionmaker(bind=engine, autoflush=False)
       +        self.DBSession = DBSession()
                if not os.path.exists(self.path):
                    Base.metadata.create_all(engine)
                self._update_counts()
       t@@ -248,17 +247,16 @@ class ChannelDB(PrintError):
                    future.set_result(result)
                # write
                self.DBSession.commit()
       -        self.DBSession.remove()
                self.print_error("SQL thread terminated")
        
            def sql(func):
                def wrapper(self, *args, **kwargs):
       +            assert threading.currentThread() != self.sql_thread
                    f = concurrent.futures.Future()
                    self.db_requests.put((f, func, args, kwargs))
                    return f.result(timeout=10)
                return wrapper
        
       -    # not @sql
            def _update_counts(self):
                self.num_channels = self.DBSession.query(ChannelInfo).count()
                self.num_nodes = self.DBSession.query(NodeInfo).count()