Jump to content

DosFreeThreadLocalMemory: Difference between revisions

From EDM2
Ak120 (talk | contribs)
Ak120 (talk | contribs)
mNo edit summary
 
Line 1: Line 1:
==Description==
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==
<PRE>
  DosFreeThreadLocalMemory (p)
#define INCL_DOSPROCESS
#include <os2.h>
 
ULONG    *p;  /* Address of the memory block to free. */
APIRET    rc; /* Return Code. */
 
rc = DosFreeThreadLocalMemory(p);
</PRE>


==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
;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;
}

Related Functions