Back to index

lightning-sunbird  0.9+nobinonly
Defines | Functions | Variables
initclk.c File Reference
#include "prlock.h"
#include "prcvar.h"
#include "prthread.h"
#include "prinrval.h"
#include "prlog.h"
#include <stdio.h>
#include <stdlib.h>

Go to the source code of this file.

Defines

#define SHORT_TIMEOUT   1000
#define LONG_TIMEOUT   3000

Functions

void ThreadFunc (void *arg)
int main ()
 main()

Variables

PRLocklock1
PRLocklock2
PRCondVarcv1
PRCondVarcv2

Define Documentation

#define LONG_TIMEOUT   3000

Definition at line 56 of file initclk.c.

#define SHORT_TIMEOUT   1000

Definition at line 55 of file initclk.c.


Function Documentation

int main ( void  )

main()

Definition at line 68 of file initclk.c.

{
    PRThread *thread;
    PRIntervalTime start, end;
    PRUint32 elapsed_ms;

    lock1 = PR_NewLock();
    PR_ASSERT(NULL != lock1);
    cv1 = PR_NewCondVar(lock1);
    PR_ASSERT(NULL != cv1);
    lock2 = PR_NewLock();
    PR_ASSERT(NULL != lock2);
    cv2 = PR_NewCondVar(lock2);
    PR_ASSERT(NULL != cv2);
    start = PR_IntervalNow();
    thread = PR_CreateThread(
            PR_USER_THREAD,
            ThreadFunc,
            NULL,
            PR_PRIORITY_NORMAL,
            PR_LOCAL_THREAD,
            PR_JOINABLE_THREAD,
            0);
    PR_ASSERT(NULL != thread);
    PR_Lock(lock2);
    PR_WaitCondVar(cv2, PR_MillisecondsToInterval(LONG_TIMEOUT));
    PR_Unlock(lock2);
    PR_JoinThread(thread);
    end = PR_IntervalNow();
    elapsed_ms = PR_IntervalToMilliseconds((PRIntervalTime)(end - start));
    /* Allow 100ms imprecision */
    if (elapsed_ms < LONG_TIMEOUT - 100 || elapsed_ms > LONG_TIMEOUT + 100) {
        printf("Elapsed time should be %u ms but is %u ms\n",
                LONG_TIMEOUT, elapsed_ms);
        printf("FAIL\n");
        exit(1);
    }
       printf("Elapsed time: %u ms, expected time: %u ms\n",
               LONG_TIMEOUT, elapsed_ms);
    printf("PASS\n");
    return 0;
}

Here is the call graph for this function:

void ThreadFunc ( void arg)

Definition at line 61 of file initclk.c.

{
    PR_Lock(lock1);
    PR_WaitCondVar(cv1, PR_MillisecondsToInterval(SHORT_TIMEOUT));
    PR_Unlock(lock1);
}

Here is the call graph for this function:


Variable Documentation

Definition at line 59 of file initclk.c.

Definition at line 59 of file initclk.c.

Definition at line 58 of file initclk.c.

Definition at line 58 of file initclk.c.