summaryrefslogtreecommitdiff
path: root/nsprpub/pr/tests/short_thread.c
blob: de069e89671c2ef342ab2cfcb0d6673c2d02256d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include <stdio.h>
#include "nspr.h"
#include "plgetopt.h"

/*
 * Create a thread that exits right away; useful for testing race conditions in thread
 * creation
 */

int _debug_on = 0;
#define DPRINTF(arg) if (_debug_on) printf arg

static void housecleaning(void *cur_time);

int main (int argc, char **argv)
{
    static PRIntervalTime thread_start_time;
    static PRThread *housekeeping_tid = NULL;
    PLOptStatus os;
    PLOptState *opt = PL_CreateOptState(argc, argv, "d");

    while (PL_OPT_EOL != (os = PL_GetNextOpt(opt)))
    {
        if (PL_OPT_BAD == os) {
            continue;
        }
        switch (opt->option)
        {
            case 'd':  /* debug mode */
                _debug_on = 1;
                break;
            default:
                break;
        }
    }
    PL_DestroyOptState(opt);

    if (( housekeeping_tid =
              PR_CreateThread (PR_USER_THREAD, housecleaning,  (void*)&thread_start_time,
                               PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD, PR_UNJOINABLE_THREAD, 0))
        == NULL ) {
        fprintf(stderr,
                "simple_test: Error - PR_CreateThread failed: (%ld, %ld)\n",
                PR_GetError(), PR_GetOSError());
        exit( 1 );
    }
    PR_Cleanup();
    return(0);
}

static void
housecleaning (void *cur_time)
{
    DPRINTF(("Child Thread exiting\n"));
}