Commit Graph

16 Commits

Author SHA1 Message Date
Aleric Inglewood
37c8ea54eb Add AIThreadID - Cleanup of apr_os_thread* related code.
Apart from just really cleaning things up and moving
everything into one class regarding thread IDs (ie,
is_main_thread(), comparing ID's etc), this also
fixes an obscure bug where LL was casting thread ID's
to U32 and then compared those to find out if it
the same thread. It's theoretically possible that
such fails on a 64bit OS.

By generalizing the interface, I adopted the use
of a thread-local cache for the current thread ID
as used by LLMutex et al, so now all code benefits
from that. The idea was even extended to now also
be used for is_main_thread() tests and even resetting
a thread ID to the ID of the current thread.
2012-08-09 06:30:31 +02:00
Lirusaito
9c61998dac Spelling fixes...
to a header *sigh*
2012-07-03 00:54:25 -04:00
Aleric Inglewood
e7a3a150a7 Add AIThreadSafeBits::wrapper_cast to cast wrapped object back to wrapper class. 2012-06-27 04:27:08 +02:00
Aleric Inglewood
e9df867a21 Like the other AIThreadSafe* objects, disallow AIThreadSafeSingleThread copy/assign 2012-06-27 04:27:07 +02:00
Aleric Inglewood
4391614d6e AIThreadSafe* update.
Updated/added documentation.
Removed AIThreadSafeWindowsHack that annoyed me (fix your compiler).
Don't use 'static' in anonymous namespace.
Use the AIThreadSafe*DC variants for default constructed objects,
as opposed to the AITHREADSAFE* macro's.
2012-06-27 04:27:07 +02:00
Aleric Inglewood
d63c54cb78 Allow AIThreadSafe*DC classes to be constructed with zero or one parameter.
Also, allow AIThreadSafeSingleThreadDC objects to auto convert
to it's underlaying type, to assign that type and to write it
directly to an ostream.
2012-06-27 04:27:07 +02:00
Aleric Inglewood
b18bc08600 Add AIAccessConst, AISTAccess, AISTAccessConst, ...
Also added AIThreadSafeSingleThread, AIThreadSafeSingleThreadDC
and AITHREADSAFESINGLETHREAD
2012-03-13 16:32:10 +01:00
Shyotl
244e30297f AIAPRPool, AIAPRRootPool, AIVolatileAPRPool, AIThreadLocalData etc, were rebranded by LL. Merging change to clean up diffs. 2011-09-20 22:08:48 -05:00
Aleric Inglewood
13560e292e Added AIFetchInventoryFolder and more.
Added a new statemachine AIFetchInventoryFolder, which can be used
to fetch the contents of a folder by name or UUID.

Also added AIEvent (and one event,
AIEvent::LLInventoryModel_mIsAgentInvUsable_true, which is needed
for AIFetchInventoryFolder).

Fixed LLInventoryModel::sBackgroundFetchActive to correctly reflect
whether or not LLInventoryModel::backgroundFetch is added to
gIdleCallbacks.

Avoid duplicated entries in sFetchQueue.

Reset sFullFetchStarted in LLInventoryModel::stopBackgroundFetch to
allow for a renewed full fetch when some single-folder fetch stops it.

Added AIStateMachine::mQueued to make calling 'cont()' more robust:
calling cont() / idle() / cont() on a row would otherwise add a
statemachine twice to the active list, which would cause a crash
when it's killed.
2011-05-22 22:01:11 +02:00
Aleric Inglewood
4e68f5878a Add missing AIReadAccessConst initialization of mIsCopyConstructed 2011-05-15 05:03:34 +02:00
Aleric Inglewood
2d648c1da0 Workaround for windows compiler bug.
Visual C++ compiler doesn't like to take a pointer to a variable
in the argument list of that variable when it is being declared.
2011-05-14 23:43:19 +02:00
Aleric Inglewood
38b33328e6 Redo the copyconstructor hack for AI*Access objects.
The previous hack wasn't thread-safe: read-only access would
access the reference counter multiple times at the same time,
which therefore would have to be thread-local to ever work.

The current solution just disables the calls to lock/unlock
for copyconstructed objects, which works if the copyconstructed
object isn't used anymore after the original is destructed.
This is the case then the copy construction only happens
upon passing a temporary to a function, which is the case.
2011-05-11 03:47:42 +02:00
Aleric Inglewood
133391be90 Merge branch 'master' of https://github.com/siana/SingularityViewer
Resolved Conflicts:
	indra/newview/llviewermedia.cpp
	indra/plugins/base_media/CMakeLists.txt

Trivial fix for indra/newview/llviewermedia.cpp.
Moved 'prepare' dependency from base_media to
base_basic because media already depends on basic.
2011-05-10 04:46:58 +02:00
Aleric Inglewood
81550aa6de Workaround for gcc 4.2.x.
g++ 4.2 (and possibly earlier) apparently call a copy
constructor when passing a temporary to a function
that takes a const reference. Added code to allow
copy-constructing the AI*Access classes for this
compiler.

g++-4.2.x also bails out when it encounters files that
do not end on a newline. So, also added those where
they were missing.
2011-05-10 03:11:48 +02:00
Shyotl
1a099167ae Fixing Win compile. (Partial) 2011-05-08 20:34:32 +02:00
Aleric Inglewood
86a19e8e91 IMP-701: An API to wrap objects for thread-safe access.
See http://redmine.imprudenceviewer.org/issues/701
2011-05-05 02:54:38 +02:00