mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 09:34:43 +00:00
TLS calls (currently unused)
svn path=/trunk/; revision=2963
This commit is contained in:
parent
69ca37d697
commit
75a810da7d
2 changed files with 137 additions and 0 deletions
48
posix/include/psx/tls.h
Normal file
48
posix/include/psx/tls.h
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
/* $Id: tls.h,v 1.1 2002/05/17 02:07:14 hyperion Exp $
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* psx/tls.h
|
||||||
|
*
|
||||||
|
* types and calls for TLS management
|
||||||
|
*
|
||||||
|
* This file is part of the ReactOS Operating System.
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Created by KJK::Hyperion <noog@libero.it>
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||||
|
*
|
||||||
|
* This source code is offered for use in the public domain. You may
|
||||||
|
* use, modify or distribute it freely.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful but
|
||||||
|
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||||
|
* DISCLAMED. This includes but is not limited to warranties of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __PSX_TLS_H_INCLUDED__
|
||||||
|
#define __PSX_TLS_H_INCLUDED__
|
||||||
|
|
||||||
|
/* INCLUDES */
|
||||||
|
|
||||||
|
/* OBJECTS */
|
||||||
|
|
||||||
|
/* TYPES */
|
||||||
|
typedef unsigned int __tls_index_t;
|
||||||
|
|
||||||
|
/* CONSTANTS */
|
||||||
|
|
||||||
|
/* PROTOTYPES */
|
||||||
|
__tls_index_t __tls_alloc();
|
||||||
|
int __tls_free(__tls_index_t index);
|
||||||
|
void * __tls_get_val(__tls_index_t index);
|
||||||
|
int __tls_put_val(__tls_index_t index, void * data);
|
||||||
|
|
||||||
|
/* MACROS */
|
||||||
|
|
||||||
|
#endif /* __PSX_TLS_H_INCLUDED__ */
|
||||||
|
|
||||||
|
/* EOF */
|
||||||
|
|
89
posix/lib/psxdll/misc/tls.c
Normal file
89
posix/lib/psxdll/misc/tls.c
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
/* $Id: tls.c,v 1.1 2002/05/17 02:07:14 hyperion Exp $
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
|
* PROJECT: ReactOS POSIX+ Subsystem
|
||||||
|
* FILE: subsys/psx/lib/psxdll/misc/tls.c
|
||||||
|
* PURPOSE: Thread local storage
|
||||||
|
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
|
||||||
|
* UPDATE HISTORY:
|
||||||
|
* 30/04/2002: Created
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <ddk/ntddk.h>
|
||||||
|
#include <ntdll/rtl.h>
|
||||||
|
#include <psx/tls.h>
|
||||||
|
#include <psx/errno.h>
|
||||||
|
|
||||||
|
__tls_index_t __tls_alloc()
|
||||||
|
{
|
||||||
|
ULONG nIndex;
|
||||||
|
|
||||||
|
RtlAcquirePebLock();
|
||||||
|
|
||||||
|
nIndex = RtlFindClearBitsAndSet(NtCurrentPeb()->TlsBitmap, 1, 0);
|
||||||
|
|
||||||
|
if (nIndex == (ULONG)-1)
|
||||||
|
errno = ENOMEM;
|
||||||
|
else
|
||||||
|
NtCurrentTeb()->TlsSlots[nIndex] = 0;
|
||||||
|
|
||||||
|
RtlReleasePebLock();
|
||||||
|
|
||||||
|
return(nIndex);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int __tls_free(__tls_index_t index)
|
||||||
|
{
|
||||||
|
if (index >= TLS_MINIMUM_AVAILABLE)
|
||||||
|
{
|
||||||
|
errno = ERANGE;
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
RtlAcquirePebLock();
|
||||||
|
|
||||||
|
if(RtlAreBitsSet(NtCurrentPeb()->TlsBitmap, index, 1))
|
||||||
|
{
|
||||||
|
NtSetInformationThread
|
||||||
|
(
|
||||||
|
NtCurrentThread(),
|
||||||
|
ThreadZeroTlsCell,
|
||||||
|
&index,
|
||||||
|
sizeof(DWORD)
|
||||||
|
);
|
||||||
|
|
||||||
|
RtlClearBits(NtCurrentPeb()->TlsBitmap, index, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
RtlReleasePebLock();
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void * __tls_get_val(__tls_index_t index)
|
||||||
|
{
|
||||||
|
if(index >= TLS_MINIMUM_AVAILABLE)
|
||||||
|
{
|
||||||
|
errno = ERANGE;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (NtCurrentTeb()->TlsSlots[index]);
|
||||||
|
}
|
||||||
|
|
||||||
|
int __tls_put_val(__tls_index_t index, void * data)
|
||||||
|
{
|
||||||
|
if(index >= TLS_MINIMUM_AVAILABLE)
|
||||||
|
{
|
||||||
|
errno = ERANGE;
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
NtCurrentTeb()->TlsSlots[index] = data;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* EOF */
|
||||||
|
|
Loading…
Reference in a new issue