Changeset 5216 for trunk/psLib/src/types
- Timestamp:
- Sep 30, 2005, 4:22:26 PM (21 years ago)
- Location:
- trunk/psLib/src/types
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/types/psArray.c
r5114 r5216 9 9 * @author Ross Harman, MHPCC 10 10 * 11 * @version $Revision: 1.3 8$ $Name: not supported by cvs2svn $12 * @date $Date: 2005- 09-24 00:17:44$11 * @version $Revision: 1.39 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2005-10-01 02:22:15 $ 13 13 * 14 14 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 41 41 } 42 42 43 psArrayElement Free(psArr);43 psArrayElementsFree(psArr); 44 44 45 45 psFree(psArr->data); … … 98 98 { 99 99 if (array == NULL) { 100 return array; 100 int d = (delta > 0) ? delta : 10; // as spec'ed in SDRS. 101 array = psArrayAlloc(d); 102 array->n = 0; 101 103 } 102 104 … … 132 134 if (psArrData[i] == data) { 133 135 memmove(&array->data[i],&array->data[i+1],(n-i-1)*sizeof(psPtr)); 136 psFree(data); // free the removed item (see Bug #449) 134 137 n--; 135 138 success = true; … … 141 144 } 142 145 143 void psArrayElement Free(psArray* psArr)146 void psArrayElementsFree(psArray* psArr) 144 147 { 145 148 … … 205 208 } 206 209 psFree(array->data[position]); 207 array->data[position] = data;210 array->data[position] = psMemIncrRefCounter(data); 208 211 209 212 return true; … … 232 235 return NULL; 233 236 } 234 return array->data[position]; 235 } 236 237 238 239 237 return psMemIncrRefCounter(array->data[position]); 238 } -
trunk/psLib/src/types/psArray.h
r5114 r5216 1 2 1 /** @file psArray.h 3 2 * … … 12 11 * @author Ross Harman, MHPCC 13 12 * 14 * @version $Revision: 1.3 2$ $Name: not supported by cvs2svn $15 * @date $Date: 2005- 09-24 00:17:44$13 * @version $Revision: 1.33 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2005-10-01 02:22:15 $ 16 15 * 17 16 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 116 115 * 117 116 */ 118 void psArrayElement Free(117 void psArrayElementsFree( 119 118 psArray* psArr ///< Void pointer array to destroy. 120 119 ); -
trunk/psLib/src/types/psList.c
r5174 r5216 6 6 * @author Robert Daniel DeSonia, MHPCC 7 7 * 8 * @version $Revision: 1.4 3$ $Name: not supported by cvs2svn $9 * @date $Date: 2005- 09-29 01:15:38$8 * @version $Revision: 1.44 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2005-10-01 02:22:15 $ 10 10 * 11 11 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 41 41 pthread_mutex_lock(&list->p_lock); 42 42 43 // remove the free function of iterators to avoid double removal from list43 // remove the associated iterators -- any references are invalid once psList is freed. 44 44 psArray* iterators = list->iterators; 45 for (int i = 0; i < iterators->n; i++) { 46 psMemSetDeallocator(iterators->data[i], NULL); 47 } 48 49 psFree(list->iterators); 45 // ONLY orphan the iterators if the list iterators are about to be destroyed 46 // a case where this is not the case is in psListSort. 47 if (psMemGetRefCounter(iterators) < 2) { 48 for (int i = 0; i < iterators->n; i++) { 49 // orphan iterators first to avoid any callbacks to dying list 50 ((psListIterator*)iterators->data[i])->list = NULL; 51 // remove all external references 52 psMemSetRefCounter(iterators->data[i], 1); 53 } 54 } 55 psFree(iterators); 50 56 51 57 for (psListElem* ptr = list->head; ptr != NULL;) { … … 71 77 72 78 // remove this iterator from the parent list 73 psArrayRemove(iter->list->iterators,iter); 74 79 if (iter->list != NULL) { 80 psArray* iters = iter->list->iterators; 81 for (int lcv = 0; lcv < iters->n; lcv++) { 82 if (iters->data[lcv] == iter) { 83 // following is done to match SDRS. 84 iters->data[lcv] = iters->data[iters->n-1]; 85 iters->n--; 86 break; 87 } 88 } 89 } 75 90 } 76 91 … … 164 179 iter->mutable = mutable; 165 180 166 // add to the list's array of iterators 167 psArray* listIterators = list->iterators; 168 int num = listIterators->n; 169 if ( num >= listIterators->nalloc) { 170 // need to resize the array to make more room for another iterator. 171 list->iterators = psArrayRealloc(listIterators,listIterators->nalloc*2); 172 listIterators = list->iterators; 173 } 174 listIterators->data[num] = iter; 175 listIterators->n = num+1; 181 // associate the iterator with the list 182 list->iterators = psArrayAdd(list->iterators,0,iter); 183 // don't want the list's array of iterators to hold a true reference 184 psMemDecrRefCounter(iter); 176 185 177 186 if (! psListIteratorSet(iter,location)) { 178 187 psFree(iter); 179 iter =NULL;188 return NULL; 180 189 } 181 190 -
trunk/psLib/src/types/psMetadataConfig.c
r5174 r5216 10 10 * @author Eric Van Alst, MHPCC 11 11 * 12 * @version $Revision: 1.4 7$ $Name: not supported by cvs2svn $13 * @date $Date: 2005- 09-29 01:15:38$12 * @version $Revision: 1.48 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2005-10-01 02:22:15 $ 14 14 * 15 15 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 995 995 nextLevelInfo->name = psStringCopy(keyName); 996 996 // Add next level to levelArray 997 levelArray = psArrayAdd(levelArray, 1,nextLevelInfo);997 levelArray = psArrayAdd(levelArray,0,nextLevelInfo); 998 998 psFree(nextLevelInfo); 999 999 // Increment level counter … … 1132 1132 return false; 1133 1133 } 1134 psFree(lowerLevelInfo);1135 1134 (*level)--; 1136 1135 }
Note:
See TracChangeset
for help on using the changeset viewer.
