By the looks of things this is a platform wherein the actual bluetooth controller is powered off when the kill switch is turned on, and powered up again when the switch is turned off. Thus the controller is initialising when the event is emitted, which starts the bluez which is getting there before it is ready to be used. The fact that a very small timeout before starting it in the upstart job is sufficient to always fix this seem indicative of this. The logical first step would be to make the open for the device in userspace detect the open error and pause and retry a couple of times. Likely we are getting EAGAIN or similar.
By the looks of things this is a platform wherein the actual bluetooth controller is powered off when the kill switch is turned on, and powered up again when the switch is turned off. Thus the controller is initialising when the event is emitted, which starts the bluez which is getting there before it is ready to be used. The fact that a very small timeout before starting it in the upstart job is sufficient to always fix this seem indicative of this. The logical first step would be to make the open for the device in userspace detect the open error and pause and retry a couple of times. Likely we are getting EAGAIN or similar.