WebhookServer: Lock serve_forever() and shutdown()

This commit is contained in:
Jannes Höke 2015-11-24 15:39:00 +01:00
parent e1f3f346bc
commit c2853fa1ef

View file

@ -2,6 +2,7 @@ import logging
from telegram import Update, NullHandler
from future.utils import bytes_to_native_str as n
from threading import Lock
import json
try:
import BaseHTTPServer
@ -22,24 +23,29 @@ class WebhookServer(BaseHTTPServer.HTTPServer, object):
self.update_queue = update_queue
self.webhook_path = webhook_path
self.is_running = False
self.server_lock = Lock()
self.shutdown_lock = Lock()
def serve_forever(self, poll_interval=0.5):
self.is_running = True
self.logger.info("Webhook Server started.")
super(WebhookServer, self).serve_forever(poll_interval)
self.logger.info("Webhook Server stopped.")
with self.server_lock:
self.is_running = True
self.logger.info("Webhook Server started.")
super(WebhookServer, self).serve_forever(poll_interval)
self.logger.info("Webhook Server stopped.")
def shutdown(self):
if not self.is_running:
return
else:
super(WebhookServer, self).shutdown()
with self.shutdown_lock:
if not self.is_running:
return
else:
super(WebhookServer, self).shutdown()
self.is_running = False
# WebhookHandler, process webhook calls
# Based on: https://github.com/eternnoir/pyTelegramBotAPI/blob/master/
# examples/webhook_examples/webhook_cpython_echo_bot.py
class WebhookHandler(BaseHTTPServer.BaseHTTPRequestHandler, object):
class WebhookHandler(BaseHTTPServer.BaseHTTPRequestHandler, object):
server_version = "WebhookHandler/1.0"
def __init__(self, request, client_address, server):