Using boost::fibers::unbuffered_channel can block the mainthread when calling mPendingCoprocs.push (LLCoprocedurePool::enqueueCoprocedure) From the documentation: - If a fiber attempts to send a value through an unbuffered channel and no fiber is waiting to receive the value, the channel will block the sending fiber. This can happen if LLCoprocedurePool::coprocedureInvokerCoro is running a coroutine and this coroutine calls yield, resuming the viewers main loop. If inside the main loop someone calls LLCoprocedurePool::enqueueCoprocedure now push will block, as there's no one waiting for a result right now. The wait would be in LLCoprocedurePool::coprocedureInvokerCoro at the start of the while loop, but we have not reached that yet again as LLCoprocedurePool::coprocedureInvokerCoro did yield before reaching pop_wait_for. The result is a deadlock. boost::fibers::buffered_channel will not block as long as there's space in the channel. A size of 4096 (DEFAULT_QUEUE_SIZE) should be plenty enough for this. |
||
|---|---|---|
| debian | ||
| doc | ||
| etc | ||
| indra | ||
| scripts | ||
| .hgignore | ||
| .hgtags | ||
| BuildParams | ||
| README.md | ||
| autobuild.xml | ||
| build.sh | ||
README.md
Second Life Viewer
This project manages the source code for the Second Life Viewer.
This source is available as open source; for details on licensing, see the licensing page on the Second Life wiki
For information on how to use and contribute to this, see the open source portal on the wiki.
To download the current default version, visit the download page. For even newer versions try the Alternate Viewers page