mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-08-09 03:10:27 +00:00
set stackaddr if mmap is called in pthread_create
when calling pthread_create with a pthread_attr_t *attr, if attr != NULL AND attr->stackaddr != 0, then stack is not managed by cosmo pt->spawn.stk = attr->stackaddr, and so pt->attr.stackaddr = pt->spawn.stk is a no op if attr == NULL OR attr->stackaddr == 0, the stack is managed by cosmo, pt->spawn.stk is from a successful mmap, (and this is the oneline change) so pt->attr.stackaddr SHOULD BE SET AS pt->spawn.stk
This commit is contained in:
parent
5140897c27
commit
06f401d46d
1 changed files with 9 additions and 0 deletions
|
@ -196,6 +196,15 @@ int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
|
|||
|
||||
// we only need to save this to support pthread_getattr_np()
|
||||
pt->attr = *attr;
|
||||
// if attr->stackaddr == 0,
|
||||
// the stack is managed by cosmo,
|
||||
// pt->spawn.stk is from a successful mmap,
|
||||
// and so pt->attr.stackaddr = pt->spawn.stk
|
||||
pt->attr.stackaddr = pt->spawn.stk;
|
||||
// if attr->stackaddr != 0,
|
||||
// then stack is not managed by cosmo
|
||||
// pt->attr.stackaddr = pt->spawn.stk = attr->stackaddr
|
||||
// so the above line is a no-op.
|
||||
|
||||
// set initial status
|
||||
switch (attr->detachstate) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue