Unsuccessful solution: after the given setTimeout, I kill active transports and restart the channel that processes everything on the client side. I avoided query conflicts by binding them to an identifier and checking it for a global link, which increments every time a request is executed, and every time a request ends.
function longRunningCallCheck(refId) {
Unfortunately, this still left the PageMap blocked and any subsequent calls wait for the request to complete on the server side.
My solution at this point is to instead provide the user with the option to log out using the BookmarkablePageLink bookmark (which creates a new page that does not create competition on the PageMap page). Definitely not optimal.
Any better solutions are more than welcome, but this is the best I could come up with.
source share