add: release_sem(fThreadSem);
context: BThreadManager<TestClass, ExpectedException>::Run(void) {	// These outer try/catch blocks handle unexpected exceptions.	// Said exceptions are caught and noted in the TestResult	// class, but not allowed to escape and disrupt the other	// threads that are assumingly running concurrently.	try {			// Our parent ThreadedTestCaller should check fObject to be non-NULL,		// but we'll do it here too just to be sure.		if (!fObject)			throw CppUnit::Exception("BThreadManager::Run() -- NULL fObject pointer");				// Before running, we need to add this thread's name to		// the object's id->(name,subtestnum) map.		fObject->InitThreadInfo(fID, fName);		// This inner try/catch block is for expected exceptions.		// If we get through it without an exception, we have to		// raise a different exception that makes note of the fact		// that the exception we were expecting didn't arrive. If		// no exception is expected, then nothing is done (see		// "cppunit/TestCaller.h" for detail on the classes used		// to handle this behaviour).		try {			(fObject->*fMethod)();			    } catch ( ExpectedException & ) {			return;		}			  	CppUnit::ExpectedExceptionTraits<ExpectedException>::expectedException();	  		} catch ( CppUnit::Exception &e ) {		// Add on the thread name, then note the exception        CppUnit::Exception *threadException = new CppUnit::Exception(        	std::string(e.what()) + " (thread: " + fName + ")",        	e.sourceLine()        );        	        			fTestResult->addFailure( fObject, threadException );	}	catch ( std::exception &e ) {		// Add on the thread name, then note the exception        CppUnit::Exception *threadException = new CppUnit::Exception(        	std::string(e.what()) + " (thread: " + fName + ")"        );        	        			fTestResult->addError( fObject, threadException );	}	catch (...) {		// Add on the thread name, then note the exception		CppUnit::Exception *threadException = new CppUnit::Exception(			"caught unknown exception (thread: " + fName + ")"		);		fTestResult->addError( fObject, threadException );	}  	}