The current strategy is error prone: hot reload immediately starts, adding a stub into the Framework.getService(). But if a service was in progress, it can be paused after a lock itself blocker for the reload service. Thus creating a deadlock.
Another strategy could be to notify the other services to prevent any new activity but allow current activities to achieve their tasks... This is actually similar to the shutdown strategy.
Hot reload still breaks the server on some occasions. The server must be stopped and the studio package manually deleted from the file system.
Attached is a thread dump of the server.