moonraker: Don't use a PeriodicCallback for the init routine
The init function blocks, making it reentrant. Use "call_later" instead. Signed-off-by: Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
parent
f9b1e2922d
commit
28977bd579
|
@ -14,14 +14,14 @@ import json
|
||||||
import confighelper
|
import confighelper
|
||||||
import utils
|
import utils
|
||||||
from tornado import iostream
|
from tornado import iostream
|
||||||
from tornado.ioloop import IOLoop, PeriodicCallback
|
from tornado.ioloop import IOLoop
|
||||||
from tornado.util import TimeoutError
|
from tornado.util import TimeoutError
|
||||||
from tornado.locks import Event
|
from tornado.locks import Event
|
||||||
from app import MoonrakerApp
|
from app import MoonrakerApp
|
||||||
from utils import ServerError
|
from utils import ServerError
|
||||||
|
|
||||||
INIT_MS = 250
|
INIT_TIME = .25
|
||||||
LOG_ATTEMPT_INTERVAL = int(2000 / INIT_MS + .5)
|
LOG_ATTEMPT_INTERVAL = int(2. / INIT_TIME + .5)
|
||||||
MAX_LOG_ATTEMPTS = 10 * LOG_ATTEMPT_INTERVAL
|
MAX_LOG_ATTEMPTS = 10 * LOG_ATTEMPT_INTERVAL
|
||||||
|
|
||||||
CORE_PLUGINS = [
|
CORE_PLUGINS = [
|
||||||
|
@ -65,7 +65,6 @@ class Server:
|
||||||
self.register_static_file_handler = app.register_static_file_handler
|
self.register_static_file_handler = app.register_static_file_handler
|
||||||
self.register_upload_handler = app.register_upload_handler
|
self.register_upload_handler = app.register_upload_handler
|
||||||
self.ioloop = IOLoop.current()
|
self.ioloop = IOLoop.current()
|
||||||
self.init_cb = PeriodicCallback(self._initialize, INIT_MS)
|
|
||||||
|
|
||||||
# Setup remote methods accessable to Klippy. Note that all
|
# Setup remote methods accessable to Klippy. Note that all
|
||||||
# registered remote methods should be of the notification type,
|
# registered remote methods should be of the notification type,
|
||||||
|
@ -155,7 +154,7 @@ class Server:
|
||||||
self.ioloop.call_later(.25, self._connect_klippy)
|
self.ioloop.call_later(.25, self._connect_klippy)
|
||||||
return
|
return
|
||||||
# begin server iniialization
|
# begin server iniialization
|
||||||
self.init_cb.start()
|
self.ioloop.spawn_callback(self._initialize)
|
||||||
|
|
||||||
def process_command(self, cmd):
|
def process_command(self, cmd):
|
||||||
method = cmd.get('method', None)
|
method = cmd.get('method', None)
|
||||||
|
@ -188,7 +187,6 @@ class Server:
|
||||||
def on_connection_closed(self):
|
def on_connection_closed(self):
|
||||||
self.init_list = []
|
self.init_list = []
|
||||||
self.klippy_state = "disconnected"
|
self.klippy_state = "disconnected"
|
||||||
self.init_cb.stop()
|
|
||||||
for request in self.pending_requests.values():
|
for request in self.pending_requests.values():
|
||||||
request.notify(ServerError("Klippy Disconnected", 503))
|
request.notify(ServerError("Klippy Disconnected", 503))
|
||||||
self.pending_requests = {}
|
self.pending_requests = {}
|
||||||
|
@ -224,8 +222,9 @@ class Server:
|
||||||
# and Klippy is ready. We can stop the init
|
# and Klippy is ready. We can stop the init
|
||||||
# procedure.
|
# procedure.
|
||||||
self.init_attempts = 0
|
self.init_attempts = 0
|
||||||
self.init_cb.stop()
|
else:
|
||||||
self.init_attempts += 1
|
self.init_attempts += 1
|
||||||
|
self.ioloop.call_later(INIT_TIME, self._initialize)
|
||||||
|
|
||||||
async def _request_endpoints(self):
|
async def _request_endpoints(self):
|
||||||
result = await self.klippy_apis.list_endpoints(default=None)
|
result = await self.klippy_apis.list_endpoints(default=None)
|
||||||
|
|
Loading…
Reference in New Issue