Blame


1 7966faa9 2004-09-23 devnull /*
2 7966faa9 2004-09-23 devnull * Thread library.
3 7966faa9 2004-09-23 devnull */
4 7966faa9 2004-09-23 devnull
5 cd7ddc9b 2003-11-23 devnull #include "threadimpl.h"
6 76193d7c 2003-09-30 devnull
7 76193d7c 2003-09-30 devnull typedef struct Mainarg Mainarg;
8 76193d7c 2003-09-30 devnull struct Mainarg
9 76193d7c 2003-09-30 devnull {
10 7966faa9 2004-09-23 devnull int argc;
11 7966faa9 2004-09-23 devnull char **argv;
12 76193d7c 2003-09-30 devnull };
13 76193d7c 2003-09-30 devnull
14 7966faa9 2004-09-23 devnull int mainstacksize;
15 76193d7c 2003-09-30 devnull extern void (*_sysfatal)(char*, va_list);
16 76193d7c 2003-09-30 devnull
17 76193d7c 2003-09-30 devnull static void
18 76193d7c 2003-09-30 devnull mainlauncher(void *arg)
19 76193d7c 2003-09-30 devnull {
20 76193d7c 2003-09-30 devnull Mainarg *a;
21 76193d7c 2003-09-30 devnull
22 76193d7c 2003-09-30 devnull a = arg;
23 7966faa9 2004-09-23 devnull _threadmaininit();
24 76193d7c 2003-09-30 devnull threadmain(a->argc, a->argv);
25 76193d7c 2003-09-30 devnull threadexits("threadmain");
26 76193d7c 2003-09-30 devnull }
27 76193d7c 2003-09-30 devnull
28 7966faa9 2004-09-23 devnull int
29 7966faa9 2004-09-23 devnull main(int argc, char **argv)
30 76193d7c 2003-09-30 devnull {
31 7966faa9 2004-09-23 devnull Mainarg a;
32 7966faa9 2004-09-23 devnull Proc *p;
33 76193d7c 2003-09-30 devnull
34 7966faa9 2004-09-23 devnull /*
35 7966faa9 2004-09-23 devnull * XXX Do daemonize hack here.
36 7966faa9 2004-09-23 devnull */
37 76193d7c 2003-09-30 devnull
38 7966faa9 2004-09-23 devnull /*
39 7966faa9 2004-09-23 devnull * Instruct QLock et al. to use our scheduling functions
40 7966faa9 2004-09-23 devnull * so that they can operate at the thread level.
41 7966faa9 2004-09-23 devnull */
42 7966faa9 2004-09-23 devnull _qlockinit(_threadsleep, _threadwakeup);
43 76193d7c 2003-09-30 devnull
44 7966faa9 2004-09-23 devnull /*
45 7966faa9 2004-09-23 devnull * Install our own _threadsysfatal which takes down
46 7966faa9 2004-09-23 devnull * the whole conglomeration of procs.
47 7966faa9 2004-09-23 devnull */
48 7966faa9 2004-09-23 devnull _sysfatal = _threadsysfatal;
49 76193d7c 2003-09-30 devnull
50 7966faa9 2004-09-23 devnull /*
51 7966faa9 2004-09-23 devnull * XXX Install our own jump handler.
52 7966faa9 2004-09-23 devnull */
53 76193d7c 2003-09-30 devnull
54 7966faa9 2004-09-23 devnull /*
55 7966faa9 2004-09-23 devnull * Install our own signal handlers.
56 7966faa9 2004-09-23 devnull */
57 7966faa9 2004-09-23 devnull notify(_threadnote);
58 76193d7c 2003-09-30 devnull
59 7966faa9 2004-09-23 devnull /*
60 7966faa9 2004-09-23 devnull * Construct the initial proc running mainlauncher(&a).
61 7966faa9 2004-09-23 devnull */
62 7966faa9 2004-09-23 devnull if(mainstacksize == 0)
63 7966faa9 2004-09-23 devnull mainstacksize = 32*1024;
64 7966faa9 2004-09-23 devnull a.argc = argc;
65 7966faa9 2004-09-23 devnull a.argv = argv;
66 7966faa9 2004-09-23 devnull p = _newproc();
67 7966faa9 2004-09-23 devnull _newthread(p, mainlauncher, &a, mainstacksize, "threadmain", 0);
68 7966faa9 2004-09-23 devnull _threadscheduler(p);
69 7966faa9 2004-09-23 devnull abort(); /* not reached */
70 7966faa9 2004-09-23 devnull return 0;
71 76193d7c 2003-09-30 devnull }
72 76193d7c 2003-09-30 devnull
73 7966faa9 2004-09-23 devnull /*
74 7966faa9 2004-09-23 devnull * No-op function here so that sched.o drags in main.o.
75 7966faa9 2004-09-23 devnull */
76 76193d7c 2003-09-30 devnull void
77 7966faa9 2004-09-23 devnull _threadlinkmain(void)
78 76193d7c 2003-09-30 devnull {
79 76193d7c 2003-09-30 devnull }