DosFreeThreadLocalMemory: Difference between revisions
Appearance
m Ak120 moved page OS2 API:CPI:DosFreeThreadLocalMemory to DosFreeThreadLocalMemory |
mNo edit summary |
||
Line 1: | Line 1: | ||
Frees a block of thread-local memory that was originally allocated using DosAllocThreadLocalMemory. | Frees a block of thread-local memory that was originally allocated using DosAllocThreadLocalMemory. | ||
==Syntax== | ==Syntax== | ||
DosFreeThreadLocalMemory (p) | |||
==Parameters== | ==Parameters== | ||
; p (ULONG *) - input : Address of the memory block to free. | ;p (ULONG *) - input: Address of the memory block to free. | ||
==Return Code== | ==Return Code== | ||
;rc (APIRET) - returns:This function returns one of the following values: | |||
This function returns one of the following values: | |||
* 0 NO_ERROR | * 0 NO_ERROR | ||
* 87 ERROR_INVALID_PARAMETER | * 87 ERROR_INVALID_PARAMETER |
Latest revision as of 23:01, 25 July 2018
Frees a block of thread-local memory that was originally allocated using DosAllocThreadLocalMemory.
Syntax
DosFreeThreadLocalMemory (p)
Parameters
- p (ULONG *) - input
- Address of the memory block to free.
Return Code
- rc (APIRET) - returns
- This function returns one of the following values:
- 0 NO_ERROR
- 87 ERROR_INVALID_PARAMETER
Remarks
When a process is started, a small block of memory is set aside to be used as a thread-local memory area. This memory is at the same virtual address for each thread, but is backed by different physical memory. This permits each thread to have a small block of memory that is unique, or local, to that thread.
The thread-local memory area consists of 32 DWORDs (128 bytes), each DWORD being 32-bits in size.
Example Code
This example shows how to allocate and free 3 DWORDs of local thread memory.
#define INCL_DOSPROCESS #define INCL_DOSERRORS #include <os2.h> #include <stdio.h> /* Needed for printf */ PULONG pulThreadDWords = NULL; /* Pointer to thread DWORDs returned */ APIRET rc = NO_ERROR; /* Return code */ int main(VOID) { /* Allocate 3 DWORDs of local thread memory */ rc = DosAllocThreadLocalMemory(3, /* Number of DWORDs */ &pulThreadDWords); /* Address returned */ if (rc != NO_ERROR) { printf("DosAllocThreadLocalMemory error: return code = %u\n", rc); return 1; } /* ... Use the thread-local memory ... */ rc = DosFreeThreadLocalMemory(pulThreadDWords); /* Free the DWORDs */ if (rc != NO_ERROR) { printf("DosFreeThreadLocalMemory error: return code = %u\n", rc); return 1; } return NO_ERROR; }