From 5bc8278d388e6a8bf5969bc143b6db6a7e4e9ed0 Mon Sep 17 00:00:00 2001 From: Chaskiel M Grundman Date: Sun, 27 Mar 2005 21:22:03 +0000 Subject: [PATCH] STABLE14-lwp-deal-with-unaligned-memory-20050326 FIXES 18050 don't double-free lwp stack space (cherry picked from commit 1156923e08d95972105fcb99045b29b2c7732fc5) --- src/lwp/lwp.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/lwp/lwp.c b/src/lwp/lwp.c index 06e3e1b49..29c6991d9 100644 --- a/src/lwp/lwp.c +++ b/src/lwp/lwp.c @@ -279,6 +279,7 @@ LWP_CreateProcess(int (*ep) (), int stacksize, int priority, void *parm, #else char *stackptr; #endif + char *stackmemory; #if defined(AFS_LWP_MINSTACKSIZE) /* @@ -346,20 +347,21 @@ LWP_CreateProcess(int (*ep) (), int stacksize, int priority, void *parm, stackptr = reserveFromStack(lwp_MaxStackSize); } stackptr -= stacksize; + stackmemory = stackptr; #else - if ((stackptr = (char *)malloc(stacksize + 7)) == NULL) { + if ((stackmemory = (char *)malloc(stacksize + 7)) == NULL) { Set_LWP_RC(); return LWP_ENOMEM; } /* Round stack pointer to byte boundary */ - stackptr = (char *)(8 * (((long)stackptr + 7) / 8)); + stackptr = (char *)(8 * (((long)stackmemory + 7) / 8)); #endif if (priority < 0 || priority >= MAX_PRIORITIES) { Set_LWP_RC(); return LWP_EBADPRI; } Initialize_Stack(stackptr, stacksize); - Initialize_PCB(temp, priority, stackptr, stacksize, ep, parm, name); + Initialize_PCB(temp, priority, stackmemory, stacksize, ep, parm, name); insert(temp, &runnable[priority]); temp2 = lwp_cpptr; if (PRE_Block != 0) @@ -835,7 +837,6 @@ Dump_One_Process(PROCESS pid) pid->stacksize, pid->stack); printf("***LWP: HWM stack usage: "); printf("%d\n", Stack_Used(pid->stack, pid->stacksize)); - free(pid->stack); } printf("***LWP: Current Stack Pointer: 0x%x\n", pid->context.topstack); if (pid->eventcnt > 0) { @@ -999,7 +1000,9 @@ Free_PCB(PROCESS pid) Debug(0, ("HWM stack usage: %d, [PCB at 0x%x]", Stack_Used(pid->stack, pid->stacksize), pid)); +#ifndef AFS_AIX32_ENV free(pid->stack); +#endif } if (pid->eventlist != NULL) free(pid->eventlist); -- 2.39.5