From: bdemsky Date: Fri, 10 Apr 2009 19:48:38 +0000 (+0000) Subject: remove stack overflow bug X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=dbd1f75dd020e19571cc39f956fb00c2d78e16e9;p=IRC.git remove stack overflow bug --- diff --git a/Robust/src/Runtime/STM/stm.c b/Robust/src/Runtime/STM/stm.c index 5e45a495..abdc0f7e 100644 --- a/Robust/src/Runtime/STM/stm.c +++ b/Robust/src/Runtime/STM/stm.c @@ -248,10 +248,20 @@ int traverseCache() { /* Create info to keep track of objects that can be locked */ int numoidrdlocked=0; int numoidwrlocked=0; - void * oidrdlocked[c_numelements]; - void * oidwrlocked[c_numelements]; + void * rdlocked[200]; + void * wrlocked[200]; int softabort=0; int i; + void ** oidrdlocked; + void ** oidwrlocked; + if (c_numelements<200) { + oidrdlocked=rdlocked; + oidwrlocked=wrlocked; + } else { + int size=c_numelements*sizeof(void*); + oidrdlocked=malloc(size); + oidwrlocked=malloc(size); + } chashlistnode_t *ptr = c_table; /* Represents number of bins in the chash table */ unsigned int size = c_size; @@ -342,6 +352,10 @@ int transAbortProcess(void **oidrdlocked, int *numoidrdlocked, void **oidwrlocke header = (objheader_t *)(((char *)(oidwrlocked[i])) - sizeof(objheader_t)); write_unlock(&header->lock); } + if (c_numelements>=200) { + free(oidrdlocked); + free(oidwrlocked); + } } /* ================================== @@ -390,7 +404,10 @@ int transCommitProcess(void ** oidrdlocked, int *numoidrdlocked, header = (objheader_t *)(((char *)(oidwrlocked[i])) - sizeof(objheader_t)); write_unlock(&header->lock); } - + if (c_numelements>=200) { + free(oidrdlocked); + free(oidwrlocked); + } return 0; }