Esempio n. 1
0
/*
    memory_tracker_remove(size_t addr)
    Removes an address and its corresponding size (if they exist)
    from the memory tracker list and adjusts the current number
    of bytes allocated.
    Return:
      0: on success
      -1: if the mutex could not be locked
      -2: if the addr was not found in the list
*/
int memory_tracker_remove(size_t addr) {
  int ret = -1;

  if (!memory_tracker_lock_mutex()) {
    struct mem_block *p;

    if ((p = memory_tracker_find(addr))) {
      memtrack.current_allocated -= p->size;

      p->prev->next = p->next;

      if (p->next)
        p->next->prev = p->prev;
      else
        memtrack.tail = p->prev;

      ret = 0;
      MEM_TRACK_FREE(p);
    } else {
      if (addr)
        memtrack_log("memory_tracker_remove(): addr not found in list,"
                     " 0x%.8x\n", addr);

      ret = -2;
    }

    memory_tracker_unlock_mutex();
  }

  return ret;
}
Esempio n. 2
0
/*
    vpx_memory_tracker_destroy()
    If our global struct was initialized zeros out all its members,
    frees memory and destroys it's mutex
*/
void vpx_memory_tracker_destroy() {
  if (!memory_tracker_lock_mutex()) {
    struct mem_block *p  = memtrack.head,
                          * p2 = memtrack.head;

    memory_tracker_dump();

    while (p) {
      p2 = p;
      p  = p->next;

      MEM_TRACK_FREE(p2);
    }

    memtrack.head              = NULL;
    memtrack.tail              = NULL;
    memtrack.len               = 0;
    memtrack.current_allocated = 0;
    memtrack.max_allocated     = 0;

    if (!g_logging.type && g_logging.file && g_logging.file != stderr) {
      fclose(g_logging.file);
      g_logging.file = NULL;
    }

    memory_tracker_unlock_mutex();

    g_b_mem_tracker_inited = 0;
  }
}
Esempio n. 3
0
/*
    vpx_memory_tracker_init(int padding_size, int pad_value)
      padding_size - the size of the padding before and after each mem addr.
                     Values > 0 indicate that integrity checks can be performed
                     by inspecting these areas.
      pad_value - the initial value within the padding area before and after
                  each mem addr.

    Initializes global memory tracker structure
    Allocates the head of the list
*/
int vpx_memory_tracker_init(int padding_size, int pad_value)
{
    if (!g_b_mem_tracker_inited)
    {
        if (memtrack.head = (struct mem_block *)MEM_TRACK_MALLOC(sizeof(struct mem_block)))
        {
            int ret;

            MEM_TRACK_MEMSET(memtrack.head, 0, sizeof(struct mem_block));

            memtrack.tail = memtrack.head;

            memtrack.current_allocated = 0;
            memtrack.max_allocated     = 0;

            memtrack.padding_size = padding_size;
            memtrack.pad_value    = pad_value;

#if defined(LINUX) || defined(__uClinux__)
            ret = pthread_mutex_init(&memtrack.mutex,
                                     NULL);            /*mutex attributes (NULL=default)*/
#elif defined(WIN32) || defined(_WIN32_WCE)
            memtrack.mutex = create_mutex(NULL,   /*security attributes*/
                                          FALSE,  /*we don't want initial ownership*/
                                          NULL);  /*mutex name*/
            ret = !memtrack.mutex;
#elif defined(VXWORKS)
            memtrack.mutex = sem_bcreate(SEM_Q_FIFO, /*SEM_Q_FIFO non-priority based mutex*/
                                         SEM_FULL);  /*SEM_FULL initial state is unlocked*/
            ret = !memtrack.mutex;
#elif defined(NDS_NITRO)
            os_init_mutex(&memtrack.mutex);
            ret = 0;
#elif defined(NO_MUTEX)
            ret = 0;
#endif

            if (ret)
            {
                memtrack_log("vpx_memory_tracker_init: Error creating mutex!\n");

                MEM_TRACK_FREE(memtrack.head);
                memtrack.head = NULL;
            }
            else
            {
                memtrack_log("Memory Tracker init'd, v."vpx_mem_tracker_version" pad_size:%d pad_val:0x%x %d\n"
                             , padding_size
                             , pad_value
                             , pad_value);
                g_b_mem_tracker_inited = 1;
            }
        }
    }

    return g_b_mem_tracker_inited;
}
int vpx_memory_tracker_init(int padding_size, int pad_value) {
  if (!g_b_mem_tracker_inited) {
    if ((memtrack.head = (struct mem_block *)
                         MEM_TRACK_MALLOC(sizeof(struct mem_block)))) {
      int ret;

      MEM_TRACK_MEMSET(memtrack.head, 0, sizeof(struct mem_block));

      memtrack.tail = memtrack.head;

      memtrack.current_allocated = 0;
      memtrack.max_allocated     = 0;

      memtrack.padding_size = padding_size;
      memtrack.pad_value    = pad_value;

#if HAVE_PTHREAD_H
      ret = pthread_mutex_init(&memtrack.mutex,
                               NULL);            
#elif defined(WIN32) || defined(_WIN32_WCE)
      memtrack.mutex = CreateMutex(NULL,   
                                   FALSE,  
                                   NULL);  
      ret = !memtrack.mutex;
#elif defined(VXWORKS)
      memtrack.mutex = sem_bcreate(SEM_Q_FIFO, 
                                   SEM_FULL);  
      ret = !memtrack.mutex;
#elif defined(NO_MUTEX)
      ret = 0;
#endif

      if (ret) {
        memtrack_log("vpx_memory_tracker_init: Error creating mutex!\n");

        MEM_TRACK_FREE(memtrack.head);
        memtrack.head = NULL;
      } else {
        memtrack_log("Memory Tracker init'd, v."vpx_mem_tracker_version" pad_size:%d pad_val:0x%x %d\n"
, padding_size
, pad_value
, pad_value);
        g_b_mem_tracker_inited = 1;
      }
    }
  }

  return g_b_mem_tracker_inited;
}
Esempio n. 5
0
/*
    vpx_memory_tracker_destroy()
    If our global struct was initialized zeros out all its members,
    frees memory and destroys it's mutex
*/
void vpx_memory_tracker_destroy()
{

    if (!memory_tracker_lock_mutex())
    {
        struct mem_block *p  = memtrack.head,
                                  * p2 = memtrack.head;

        memory_tracker_dump();

        while (p)
    {
            p2 = p;
            p  = p->next;

            MEM_TRACK_FREE(p2);
        }

        memtrack.head              = NULL;
        memtrack.tail              = NULL;
        memtrack.len               = 0;
        memtrack.current_allocated = 0;
        memtrack.max_allocated     = 0;

        if ((g_logging.type == 0) && (g_logging.file != 0)) //&& (g_logging.file != stderr) )
        {
#if !defined(NDS_NITRO)
            fclose(g_logging.file);
#endif
            g_logging.file = NULL;
        }

        memory_tracker_unlock_mutex();

        g_b_mem_tracker_inited = 0;

    }

}