File: paragc.c

package info (click to toggle)
euslisp 9.31%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 55,448 kB
  • sloc: ansic: 41,610; lisp: 3,339; makefile: 286; sh: 238; asm: 138; python: 53
file content (49 lines) | stat: -rw-r--r-- 1,277 bytes parent folder | download | duplicates (2)
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
#if Solaris2
static pmark(p)
register pointer p;
{ pointer gcstack[32768];
/*  fprintf(stderr, "pmark: th=%d p=%x\n", thr_self(), p); */
  mark(p,gcstack);}

static pmarkcontext(ctx)
register context *ctx;
{ register pointer *p;
  pointer gcstack[32768];
  for (p=ctx->stack; p<ctx->vsp; p++)
    if (ispointer(*p) && 
	    ((ctx->stack> (pointer *)*p) || ((pointer *)*p>ctx->stacklimit)))
	{  mark(*p,gcstack); } ;
  mark(ctx->lastalloc,gcstack);}

static pmarkall()
{ register pointer p;
  register int i=0,j=0;
  register context *ctx;
  thread_t tid[512];
  thr_create(0, 150*1024, pmark, sysobj, THR_BOUND, &tid[j++]);
/*  p=pkglist;
  while (p!=NIL) {
    thr_create(0, 150*1024, pmark, ccar(p), THR_BOUND, &tid[j++]);
    p=ccdr(p);} */
  thr_create(0, 150*1024, pmark, pkglist, THR_BOUND, &tid[j++]);
  for (i=0; i<MAXTHREAD; i++) {
    if (ctx=euscontexts[i]) 
      thr_create(0, 150*1024, pmarkcontext, ctx, THR_BOUND, &tid[j++]);
    }
  for (i=0; i<MAXCLASS; i++) {
    p=classtab[i].def;
    if (p && ispointer(p)) pmark(p); }
  /* pmark(pkglist); */
  if (debug) fprintf(stderr, ";; gc-threads=%d\n", j);
  for (i=0; i<j; i++) thr_join(tid[i], 0, 0);
  }
#endif


/*#if Solaris2
  if (spevalof(QPARAGC)==NIL)  markall();
  else pmarkall();
  #else
  #endif */