… | |
… | |
577 | } |
577 | } |
578 | } |
578 | } |
579 | |
579 | |
580 | static void end_thread (void) |
580 | static void end_thread (void) |
581 | { |
581 | { |
582 | bdb_req req; |
582 | bdb_req req = calloc (1, sizeof (bdb_cb)); |
583 | |
|
|
584 | Newz (0, req, 1, bdb_cb); |
|
|
585 | |
583 | |
586 | req->type = REQ_QUIT; |
584 | req->type = REQ_QUIT; |
587 | req->pri = PRI_MAX + PRI_BIAS; |
585 | req->pri = PRI_MAX + PRI_BIAS; |
588 | |
586 | |
589 | X_LOCK (reqlock); |
587 | X_LOCK (reqlock); |
… | |
… | |
923 | --nready; |
921 | --nready; |
924 | |
922 | |
925 | X_UNLOCK (reqlock); |
923 | X_UNLOCK (reqlock); |
926 | |
924 | |
927 | if (req->type == REQ_QUIT) |
925 | if (req->type == REQ_QUIT) |
|
|
926 | { |
|
|
927 | X_LOCK (reslock); |
|
|
928 | free (req); |
|
|
929 | self->req = 0; |
|
|
930 | X_UNLOCK (reslock); |
|
|
931 | |
928 | goto quit; |
932 | goto quit; |
|
|
933 | } |
929 | |
934 | |
930 | bdb_request (req); |
935 | bdb_request (req); |
931 | |
936 | |
932 | X_LOCK (reslock); |
937 | X_LOCK (reslock); |
933 | |
938 | |