mdb_alloc
(), mdb_zalloc
() and mdb_free
() Functions
void *mdb_alloc(size_t size, uint_t flags); void *mdb_zalloc(size_t size, uint_t flags); void mdb_free(void *buf, size_t size); void mdb_free_gc(void *buf, size_t size);
mdb_alloc
() allocates size bytes of debugger memory and returns a pointer to the allocated memory. The allocated memory is at least double-word aligned, so it can hold any C data structure. No greater alignment can be assumed. The flags parameter should be the bitwise OR
of one or more of the following values:
-
UM_NOSLEEP
-
If sufficient memory to fulfill the request is not immediately available, return NULL to indicate failure. The caller must check for NULL and handle this case appropriately.
-
UM_SLEEP
-
If sufficient memory to fulfill the request is not immediately available, sleep until such time as the request can be fulfilled. As a result,
UM_SLEEP
allocations are guaranteed to succeed. The caller need not check for a NULL return value. -
UM_GC
-
Garbage-collect allocation automatically at the end of this debugger command. The caller should not subsequently call
mdb_free
() on this block, as the debugger will take care of deallocation automatically. All memory allocation from within a dcmd must useUM_GC
so that if the dcmd is interrupted by the user, the debugger can garbage-collect the memory.
mdb_zalloc
() is like mdb_alloc
(), but the allocated memory is filled with zeroes before returning it to the caller. No guarantees are made about the initial contents of memory returned by mdb_alloc
(). mdb_free
() is used to free previously allocated memory (unless it was allocated UM_GC
). The buffer address and size must exactly match the original allocation. It is not legal to free only a portion of an allocation with mdb_free
(). It is not legal to free an allocation more than once. An allocation of zero bytes always returns NULL; freeing a NULL pointer with size zero always succeeds. mdb_free_gc
() can be used to free memory previously allocated with UM_GC
. It should only be used for larger buffers which are no longer in use.