Back to index

lightning-sunbird  0.9+nobinonly
Functions
EnterMonitor.cpp File Reference
#include <ThreadManagerTests.h>

Go to the source code of this file.

Functions

 TM_OJIAPITest (ThreadManager_EnterMonitor_1)
 TM_OJIAPITest (ThreadManager_EnterMonitor_2)
 TM_OJIAPITest (ThreadManager_EnterMonitor_3)
 TM_OJIAPITest (ThreadManager_EnterMonitor_4)

Function Documentation

TM_OJIAPITest ( ThreadManager_EnterMonitor_1  )

Definition at line 40 of file EnterMonitor.cpp.

                                            {
       GET_TM_FOR_TEST
       nsresult rc = threadMgr->EnterMonitor(NULL);
       if (NS_FAILED(rc))
              return TestResult::PASS("Method shoulf fail because invalid (NULL) adress is specified.");
       return TestResult::FAIL("EnterMonitor", rc);

}

Here is the call graph for this function:

TM_OJIAPITest ( ThreadManager_EnterMonitor_2  )

Definition at line 49 of file EnterMonitor.cpp.

                                            {
       GET_TM_FOR_TEST
       //printf("Entering monitor with adress %p\n", threadMgr);
       nsresult rc = threadMgr->EnterMonitor(threadMgr);
       if (NS_SUCCEEDED(rc))
              return TestResult::PASS("Current thread can enter monitor even if no other thread we created.");
       return TestResult::FAIL("EnterMonitor", rc);

}

Here is the call graph for this function:

TM_OJIAPITest ( ThreadManager_EnterMonitor_3  )

Definition at line 59 of file EnterMonitor.cpp.

                                            {
       GET_TM_FOR_TEST
       nsresult rc = threadMgr->EnterMonitor(threadMgr);
       printf("Entering monitor with adress %p\n", threadMgr);
       if (NS_SUCCEEDED(rc)) {
              printf("Entering monitor again with adress %p\n", threadMgr);
              nsresult rc = threadMgr->EnterMonitor(threadMgr);
              if (NS_SUCCEEDED(rc))
                     return TestResult::PASS("One thread can enter monitor twice.");
              return TestResult::FAIL("EnterMonitor", rc);
       }
       return TestResult::FAIL("EnterMonitor", "Can't enter monitor at all", rc);

}

Here is the call graph for this function:

TM_OJIAPITest ( ThreadManager_EnterMonitor_4  )

Definition at line 75 of file EnterMonitor.cpp.

                                            {
       GET_TM_FOR_TEST
       class DummyThread : public BaseDummyThread {
       public:
              DummyThread(nsIThreadManager *threadMgr, nsresult def_rc) {
                     tm = threadMgr;
                     rc = def_rc; 
              }
              NS_METHOD Run() { 
                     //printf("New thread enters monitor with adress %p ... ", tm); 
                     tm->EnterMonitor(tm); 
                     rc = NS_ERROR_FAILURE;
                     //printf("Error - new thread should wait while first thread exit monitor !\n"); 
                     while(1); 
                     return NS_OK;
              }
       };
       PRUint32 id = 0;
       DummyThread *newThread = new DummyThread(threadMgr, NS_OK);

       printf("Our thread enters monitor with adress %p (%d) ...\n", threadMgr, id);
       nsresult rc = threadMgr->EnterMonitor(threadMgr);
       if (NS_SUCCEEDED(rc)) {
              rc = threadMgr->CreateThread(&id, (nsIRunnable*)newThread);
              if (NS_SUCCEEDED(rc))  {
                     //let's give new thread a second to call EnterMonitor method
                     threadMgr->Sleep(1000);
                     rc = newThread->rc;
                     if (NS_SUCCEEDED(rc))
                            return TestResult::PASS("Another thread can't enter monitor locked by current thread.");
                     return TestResult::FAIL("EnterMonitor", rc);

              }
              return TestResult::FAIL("EnterMonitor", "Can't create new thread", rc);

       }
       printf("First thread can't enter monitor ...\n");
       return TestResult::FAIL("EnterMonitor", "First thread can't enter monitor", rc);

}

Here is the call graph for this function: