Skip to content

Commit c2853fa

Browse files
committed
WebhookServer: Lock serve_forever() and shutdown()
1 parent e1f3f34 commit c2853fa

1 file changed

Lines changed: 15 additions & 9 deletions

File tree

telegram/utils/webhookhandler.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from telegram import Update, NullHandler
44
from future.utils import bytes_to_native_str as n
5+
from threading import Lock
56
import json
67
try:
78
import BaseHTTPServer
@@ -22,24 +23,29 @@ def __init__(self, server_address, RequestHandlerClass, update_queue,
2223
self.update_queue = update_queue
2324
self.webhook_path = webhook_path
2425
self.is_running = False
26+
self.server_lock = Lock()
27+
self.shutdown_lock = Lock()
2528

2629
def serve_forever(self, poll_interval=0.5):
27-
self.is_running = True
28-
self.logger.info("Webhook Server started.")
29-
super(WebhookServer, self).serve_forever(poll_interval)
30-
self.logger.info("Webhook Server stopped.")
30+
with self.server_lock:
31+
self.is_running = True
32+
self.logger.info("Webhook Server started.")
33+
super(WebhookServer, self).serve_forever(poll_interval)
34+
self.logger.info("Webhook Server stopped.")
3135

3236
def shutdown(self):
33-
if not self.is_running:
34-
return
35-
else:
36-
super(WebhookServer, self).shutdown()
37+
with self.shutdown_lock:
38+
if not self.is_running:
39+
return
40+
else:
41+
super(WebhookServer, self).shutdown()
42+
self.is_running = False
3743

3844

3945
# WebhookHandler, process webhook calls
4046
# Based on: https://github.com/eternnoir/pyTelegramBotAPI/blob/master/
4147
# examples/webhook_examples/webhook_cpython_echo_bot.py
42-
class WebhookHandler(BaseHTTPServer.BaseHTTPRequestHandler, object):
48+
class WebhookHandler(BaseHTTPServer.BaseHTTPRequestHandler, object):
4349
server_version = "WebhookHandler/1.0"
4450

4551
def __init__(self, request, client_address, server):

0 commit comments

Comments
 (0)