Hi,
I'm not sure if this is a known behavior (and should just be better
documented), a bug or just bad practices on my part -- Flow goes like this:
1) In a global hook, create a continuation X and attach it to several
hookpoints in a transaction Y.
2) When called through one of the hookpoints, send an asynch request to an
external service that does URL categorization.
3) Return without reenabling (since we don't want to proceed before getting the
response).
4) A dedicated thread receives the response, and schedules continuation X.
(There's a mechanism that makes sure that cont X is still valid when the URL
categorization response arrives)
5) continuation X is called with an immediate event and calls TSHttpSsnArgGet
on transaction Y session.
6) If a client disconnects after we retrieve the session (and validate it), but
before we access the variables themselves...
Problem is when cont X is called due to the scheduled event, it does not lock
the HttpSM mutex, and a 'just-in-time' client disconnect can destroy the
ua_session.
My solution to this was to create continuation X with the HttpSM mutex -- Does
this seem reasonable?
BTW -- I saw the TSHttpSchedule function that aims to solve a similar issue,
but it appears to cause transactions to hang occasionally since it overrides
the HttpSM default handler.
Cheers,
Uri