|  | @@ -232,7 +232,7 @@ class CompletionService:
 | 
	
		
			
				|  |  |                  logging.exception("Unknown Error in completion")
 | 
	
		
			
				|  |  |                  PubHandler.pub_error(user, generate_task_id, e)
 | 
	
		
			
				|  |  |              finally:
 | 
	
		
			
				|  |  | -                db.session.commit()
 | 
	
		
			
				|  |  | +                db.session.remove()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @classmethod
 | 
	
		
			
				|  |  |      def countdown_and_close(cls, flask_app: Flask, worker_thread, pubsub, detached_user,
 | 
	
	
		
			
				|  | @@ -242,22 +242,25 @@ class CompletionService:
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          def close_pubsub():
 | 
	
		
			
				|  |  |              with flask_app.app_context():
 | 
	
		
			
				|  |  | -                user = db.session.merge(detached_user)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                sleep_iterations = 0
 | 
	
		
			
				|  |  | -                while sleep_iterations < timeout and worker_thread.is_alive():
 | 
	
		
			
				|  |  | -                    if sleep_iterations > 0 and sleep_iterations % 10 == 0:
 | 
	
		
			
				|  |  | -                        PubHandler.ping(user, generate_task_id)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    time.sleep(1)
 | 
	
		
			
				|  |  | -                    sleep_iterations += 1
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                if worker_thread.is_alive():
 | 
	
		
			
				|  |  | -                    PubHandler.stop(user, generate_task_id)
 | 
	
		
			
				|  |  | -                    try:
 | 
	
		
			
				|  |  | -                        pubsub.close()
 | 
	
		
			
				|  |  | -                    except Exception:
 | 
	
		
			
				|  |  | -                        pass
 | 
	
		
			
				|  |  | +                try:
 | 
	
		
			
				|  |  | +                    user = db.session.merge(detached_user)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    sleep_iterations = 0
 | 
	
		
			
				|  |  | +                    while sleep_iterations < timeout and worker_thread.is_alive():
 | 
	
		
			
				|  |  | +                        if sleep_iterations > 0 and sleep_iterations % 10 == 0:
 | 
	
		
			
				|  |  | +                            PubHandler.ping(user, generate_task_id)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        time.sleep(1)
 | 
	
		
			
				|  |  | +                        sleep_iterations += 1
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    if worker_thread.is_alive():
 | 
	
		
			
				|  |  | +                        PubHandler.stop(user, generate_task_id)
 | 
	
		
			
				|  |  | +                        try:
 | 
	
		
			
				|  |  | +                            pubsub.close()
 | 
	
		
			
				|  |  | +                        except Exception:
 | 
	
		
			
				|  |  | +                            pass
 | 
	
		
			
				|  |  | +                finally:
 | 
	
		
			
				|  |  | +                    db.session.remove()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          countdown_thread = threading.Thread(target=close_pubsub)
 | 
	
		
			
				|  |  |          countdown_thread.start()
 | 
	
	
		
			
				|  | @@ -394,7 +397,7 @@ class CompletionService:
 | 
	
		
			
				|  |  |                      logging.exception(e)
 | 
	
		
			
				|  |  |                      raise
 | 
	
		
			
				|  |  |              finally:
 | 
	
		
			
				|  |  | -                db.session.commit()
 | 
	
		
			
				|  |  | +                db.session.remove()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  try:
 | 
	
		
			
				|  |  |                      pubsub.unsubscribe(generate_channel)
 | 
	
	
		
			
				|  | @@ -436,7 +439,7 @@ class CompletionService:
 | 
	
		
			
				|  |  |                          logging.exception(e)
 | 
	
		
			
				|  |  |                          raise
 | 
	
		
			
				|  |  |                  finally:
 | 
	
		
			
				|  |  | -                    db.session.commit()
 | 
	
		
			
				|  |  | +                    db.session.remove()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                      try:
 | 
	
		
			
				|  |  |                          pubsub.unsubscribe(generate_channel)
 |