Try to work around a locking problem by spinning in the JS async queue code.
Problem is that js_queue_cb() needs to sync with play_exec() to avoid
hanging when JS play() is executed. It implicitly has the GDK lock, and
usess widgets_update_lock for synchronisation; play_exec() and, for that
matter, update_time_widget_cb, need to claim and release this lock while
maintaining the other lock.