int GlobalRWLock::blocking_ast_cached_lock(void* ast_object)
{
	GlobalRWLock* globalRWLock = static_cast<GlobalRWLock*>(ast_object);

	try
	{
		if (!globalRWLock->cachedLock)
			return 0;

		Database* const dbb = globalRWLock->cachedLock->lck_dbb;
		AsyncContextHolder tdbb(dbb, FB_FUNCTION);

		MutexLockGuard counterGuard(globalRWLock->counterMutex, FB_FUNCTION);
		globalRWLock->blockingAstHandler(tdbb);
	}
	catch (const Exception&)
	{} // no-op

	return 0;
}
Beispiel #2
0
int GlobalRWLock::blocking_ast_cached_lock(void* ast_object)
{
	GlobalRWLock* globalRWLock = static_cast<GlobalRWLock*>(ast_object);

	try
	{
		Firebird::MutexLockGuard counterGuard(globalRWLock->counterMutex);
		if (!globalRWLock->cachedLock)
			return 0;

		Database* dbb = globalRWLock->cachedLock->lck_dbb;
		AstContextHolder tdbb(dbb);

		if (globalRWLock->cachedLock)
			globalRWLock->blockingAstHandler(tdbb);
	}
	catch (const Firebird::Exception&)
	{} // no-op

	return 0;
}