diff options
author | Nat Goodspeed <nat@lindenlab.com> | 2019-12-19 11:50:52 -0500 |
---|---|---|
committer | Nat Goodspeed <nat@lindenlab.com> | 2020-03-25 19:25:42 -0400 |
commit | ce36ef8242ce4af423832ced90f724615b5b3140 (patch) | |
tree | ed238d87829daa3fde4a60149aeeb902931efd2b /indra/newview/llsrv.h | |
parent | 5c92047e827a0e997b726aa9f516ace124cc277f (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