summaryrefslogtreecommitdiff
path: root/indra/newview/llsrv.h
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2019-12-19 11:50:52 -0500
committerNat Goodspeed <nat@lindenlab.com>2020-03-25 19:25:42 -0400
commitce36ef8242ce4af423832ced90f724615b5b3140 (patch)
treeed238d87829daa3fde4a60149aeeb902931efd2b /indra/newview/llsrv.h
parent5c92047e827a0e997b726aa9f516ace124cc277f (diff)
DRTVWR-476: Use LLThreadSafeQueue::close() to shut down coprocs.
The tactic of pushing an empty QueuedCoproc::ptr_t to signal coprocedure close only works for LLCoprocedurePools with a single coprocedure (e.g. "Upload" and "AIS"). Only one coprocedureInvokerCoro() coroutine will pop that empty pointer and shut down properly -- the rest will continue waiting indefinitely. Rather than pushing some number of empty pointers, hopefully enough to notify all consumer coroutines, close() the queue. That will notify as many consumers as there may be. That means catching LLThreadSafeQueueInterrupt from popBack(), instead of detecting empty pointer. Also, if a queued coprocedure throws an exception, coprocedureInvokerCoro() logs it as before -- but instead of rethrowing it, the coroutine now loops back to wait for more work. Otherwise, the number of coroutines servicing the queue dwindles.
Diffstat (limited to 'indra/newview/llsrv.h')
0 files changed, 0 insertions, 0 deletions