Exemplo n.º 1
0
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();
}	
Exemplo n.º 2
0
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));
  }
}
Exemplo n.º 3
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;
}