void AddBinClass(ClassClass * cb) { register int left, right, middle, result, i; char *name = cbName(cb); struct Hjava_lang_ClassLoader *loader = cbLoader(cb); BINCLASS_LOCK(); left = 0; right = nbinclasses - 1; result = 1; while (left <= right) { ClassClass *cb1; middle = (left+right)/2; cb1 = binclasses[middle]; result = strcmp(name, cbName(cb1)); if (result == 0) { if (loader < cbLoader(cb1)) { result = -1; } else if (loader > cbLoader(cb1)) { result = 1; } else { result = 0; } } if (result < 0) { right = middle-1; } else if (result > 0) { left = middle+1; } else { break; } } if (result != 0) { if (nbinclasses >= sizebinclasses) { if (binclasses == 0) binclasses = (ClassClass **) sysMalloc(sizeof(ClassClass *) * (sizebinclasses = 50)); else binclasses = (ClassClass **) sysRealloc(binclasses, sizeof(ClassClass *) * (sizebinclasses = nbinclasses * 2)); } if (binclasses == 0) goto unlock; right++; for (i = nbinclasses; i > right; i--) { binclasses[i] = binclasses[i-1]; } binclasses[right] = cb; nbinclasses++; } unlock: BINCLASS_UNLOCK(); }
void *Allocator::realloc(void *ptr, size_t size) { // Free it ? if(size <= 0) { Allocator::free(ptr); return NULL; } // Find the node bool is_mine = false; AllocatorNode *ptrs_ = ptrs; if(ptr == NULL) is_mine = true; else { while(ptrs_) { if(ptrs_->ptr == ptr) { is_mine = true; break; } ptrs_ = ptrs_->next; } } if(!is_mine) error("Allocator: cannot realloc a pointer which is not mine."); if(ptr) { // Reallocate (Here, size > 0 for sure) void *ptrx = sysRealloc(ptr, size); if(!ptrx) error("Allocator: not enough memory. Buy new ram."); // Save the new pointer ptrs_->ptr = ptrx; return(ptrx); } else { // Forcement pas un objet return(this->alloc(size, 0)); } }
static int genThreadID() { int i = 0; retry: for(; i < tidBitmapSize; i++) { if(tidBitmap[i] != 0xffffffff) { int n = ffs(~tidBitmap[i]); tidBitmap[i] |= 1 << (n-1); return (i<<5) + n; } } tidBitmap = sysRealloc(tidBitmap, (tidBitmapSize + MAP_INC) * sizeof(unsigned int)); memset(tidBitmap + tidBitmapSize, 0, MAP_INC * sizeof(unsigned int)); tidBitmapSize += MAP_INC; goto retry; }