コード例 #1
0
ファイル: mem4.c プロジェクト: shenjian74/Bitcoin-History
/*
** Allocate nBytes of memory
*/
static void *memsys4Malloc(int nBytes){
  sqlite3_int64 *p = 0;
  if( mem.alarmCallback!=0
         && mem.nowUsed+mem.nowUsedMMap+nBytes>=mem.alarmThreshold ){
    sqlite3MemsysAlarm(nBytes);
  }
  if( (p = mmapAlloc(nBytes))==0 ){
    p = malloc(nBytes+8);
    if( p==0 ){
      sqlite3MemsysAlarm(nBytes);
      p = malloc(nBytes+8);
    }
    if( p ){
      p[0] = nBytes;
      p++;
      mem.nowUsed += nBytes;
      if( mem.nowUsed>mem.mxUsed ){
        mem.mxUsed = mem.nowUsed;
      }
    }
  }
  return (void*)p; 
}
コード例 #2
0
ファイル: mem1.cpp プロジェクト: addame/rhodes
/*
** Allocate nBytes of memory
*/
EXPORT_C void *sqlite3_malloc(int nBytes){
  sqlite3_int64 *p = 0;
  if( nBytes>0 ){
    enterMem();
    if( mem.alarmCallback!=0 && mem.nowUsed+nBytes>=mem.alarmThreshold ){
      sqlite3MemsysAlarm(nBytes);
    }
	p = (sqlite3_int64*)malloc(nBytes+8);
    if( p==0 ){
      sqlite3MemsysAlarm(nBytes);
	  p = (sqlite3_int64*)malloc(nBytes+8);
    }
    if( p ){
      p[0] = nBytes;
      p++;
      mem.nowUsed += nBytes;
      if( mem.nowUsed>mem.mxUsed ){
        mem.mxUsed = mem.nowUsed;
      }
    }
    sqlite3_mutex_leave(mem.mutex);
  }
  return (void*)p; 
}
コード例 #3
0
ファイル: mem1.cpp プロジェクト: addame/rhodes
/*
** Change the size of an existing memory allocation
*/
EXPORT_C void *sqlite3_realloc(void *pPrior, int nBytes){
  int nOld;
  sqlite3_int64 *p;
  if( pPrior==0 ){
    return sqlite3_malloc(nBytes);
  }
  if( nBytes<=0 ){
    sqlite3_free(pPrior);
    return 0;
  }
  p = (sqlite3_int64*)pPrior;
  p--;
  nOld = (int)p[0];
  assert( mem.mutex!=0 );
  sqlite3_mutex_enter(mem.mutex);
  if( mem.nowUsed+nBytes-nOld>=mem.alarmThreshold ){
    sqlite3MemsysAlarm(nBytes-nOld);
  }
  p = (sqlite3_int64*)realloc(p, nBytes+8);
  if( p==0 ){
    sqlite3MemsysAlarm(nBytes);
	p = (sqlite3_int64*)pPrior;
    p--;
	p = (sqlite3_int64*)realloc(p, nBytes+8);
  }
  if( p ){
    p[0] = nBytes;
    p++;
    mem.nowUsed += nBytes-nOld;
    if( mem.nowUsed>mem.mxUsed ){
      mem.mxUsed = mem.nowUsed;
    }
  }
  sqlite3_mutex_leave(mem.mutex);
  return (void*)p;
}
コード例 #4
0
ファイル: mem2.c プロジェクト: matypatty/Reclass-2015
/*
** Allocate nByte bytes of memory.
*/
void *sqlite3_malloc(int nByte) {
    struct MemBlockHdr *pHdr;
    void **pBt;
    char *z;
    int *pInt;
    void *p = 0;
    int totalSize;

    if( nByte>0 ) {
        enterMem();
        assert( mem.disallow==0 );
        if( mem.alarmCallback!=0 && mem.nowUsed+nByte>=mem.alarmThreshold ) {
            sqlite3MemsysAlarm(nByte);
        }
        nByte = (nByte+3)&~3;
        totalSize = nByte + sizeof(*pHdr) + sizeof(int) +
                    mem.nBacktrace*sizeof(void*) + mem.nTitle;
        if( mem.iFail>0 ) {
            if( mem.iFail==1 ) {
                p = 0;
                mem.iFail = mem.iReset;
                if( mem.iFailCnt==0 ) {
                    sqlite3MemsysFailed();  /* A place to set a breakpoint */
                }
                mem.iFailCnt++;
                if( mem.iNextIsBenign || mem.iIsBenign ) {
                    mem.iBenignFailCnt++;
                }
            } else {
                p = malloc(totalSize);
                mem.iFail--;
            }
        } else {
            p = malloc(totalSize);
            if( p==0 ) {
                sqlite3MemsysAlarm(nByte);
                p = malloc(totalSize);
            }
        }
        if( p ) {
            z = p;
            pBt = (void**)&z[mem.nTitle];
            pHdr = (struct MemBlockHdr*)&pBt[mem.nBacktrace];
            pHdr->pNext = 0;
            pHdr->pPrev = mem.pLast;
            if( mem.pLast ) {
                mem.pLast->pNext = pHdr;
            } else {
                mem.pFirst = pHdr;
            }
            mem.pLast = pHdr;
            pHdr->iForeGuard = FOREGUARD;
            pHdr->nBacktraceSlots = mem.nBacktrace;
            pHdr->nTitle = mem.nTitle;
            if( mem.nBacktrace ) {
                void *aAddr[40];
                pHdr->nBacktrace = backtrace(aAddr, mem.nBacktrace+1)-1;
                memcpy(pBt, &aAddr[1], pHdr->nBacktrace*sizeof(void*));
            } else {
                pHdr->nBacktrace = 0;
            }
            if( mem.nTitle ) {
                memcpy(z, mem.zTitle, mem.nTitle);
            }
            pHdr->iSize = nByte;
            pInt = (int*)&pHdr[1];
            pInt[nByte/sizeof(int)] = REARGUARD;
            memset(pInt, 0x65, nByte);
            mem.nowUsed += nByte;
            if( mem.nowUsed>mem.mxUsed ) {
                mem.mxUsed = mem.nowUsed;
            }
            p = (void*)pInt;
        }
        sqlite3_mutex_leave(mem.mutex);
    }
    mem.iNextIsBenign = 0;
    return p;
}
コード例 #5
0
ファイル: mem2.c プロジェクト: riseven/ri7engine
/*
** Allocate nByte bytes of memory.
*/
void *sqlite3_malloc(int nByte){
  struct MemBlockHdr *pHdr;
  void **pBt;
  char *z;
  int *pInt;
  void *p = 0;
  int totalSize;

  if( nByte>0 ){
    enterMem();
    assert( mem.disallow==0 );
    if( mem.alarmCallback!=0 && mem.nowUsed+nByte>=mem.alarmThreshold ){
      sqlite3MemsysAlarm(nByte);
    }
    nByte = (nByte+3)&~3;
    if( nByte/8>NCSIZE-1 ){
      mem.sizeCnt[NCSIZE-1]++;
    }else{
      mem.sizeCnt[nByte/8]++;
    }
    totalSize = nByte + sizeof(*pHdr) + sizeof(int) +
                 mem.nBacktrace*sizeof(void*) + mem.nTitle;
    if( sqlite3FaultStep(SQLITE_FAULTINJECTOR_MALLOC) ){
      p = 0;
    }else{
      p = malloc(totalSize);
      if( p==0 ){
        sqlite3MemsysAlarm(nByte);
        p = malloc(totalSize);
      }
    }
    if( p ){
      z = p;
      pBt = (void**)&z[mem.nTitle];
      pHdr = (struct MemBlockHdr*)&pBt[mem.nBacktrace];
      pHdr->pNext = 0;
      pHdr->pPrev = mem.pLast;
      if( mem.pLast ){
        mem.pLast->pNext = pHdr;
      }else{
        mem.pFirst = pHdr;
      }
      mem.pLast = pHdr;
      pHdr->iForeGuard = FOREGUARD;
      pHdr->nBacktraceSlots = mem.nBacktrace;
      pHdr->nTitle = mem.nTitle;
      if( mem.nBacktrace ){
        void *aAddr[40];
        pHdr->nBacktrace = backtrace(aAddr, mem.nBacktrace+1)-1;
        memcpy(pBt, &aAddr[1], pHdr->nBacktrace*sizeof(void*));
      }else{
        pHdr->nBacktrace = 0;
      }
      if( mem.nTitle ){
        memcpy(z, mem.zTitle, mem.nTitle);
      }
      pHdr->iSize = nByte;
      pInt = (int*)&pHdr[1];
      pInt[nByte/sizeof(int)] = REARGUARD;
      memset(pInt, 0x65, nByte);
      mem.nowUsed += nByte;
      if( mem.nowUsed>mem.mxUsed ){
        mem.mxUsed = mem.nowUsed;
      }
      p = (void*)pInt;
    }
    sqlite3_mutex_leave(mem.mutex);
  }
  return p; 
}