mirror of
https://github.com/Perl/perl5.git
synced 2026-01-26 16:39:36 +00:00
Declare and use a variable PL_current_context to store a pointer to the thread's interpreter struct. Use this to implement implicit context undef ITHREADS, instead of a call to posix_getspecific(). For normal threaded code, this will eliminate function calls. For threaded code in shared objects (the typical configuration for Linux distribution builds) there still needs to be a function call to get the pointer to thread local variables, but there will only be one per function, not one per read of the variable.
45 lines
1.4 KiB
C
45 lines
1.4 KiB
C
/* globals.c
|
|
*
|
|
* Copyright (C) 1995, 1999, 2000, 2001, 2008 by Larry Wall and others
|
|
*
|
|
* You may distribute under the terms of either the GNU General Public
|
|
* License or the Artistic License, as specified in the README file.
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* 'For the rest, they shall represent the other Free Peoples of the World:
|
|
* Elves, Dwarves, and Men.' --Elrond
|
|
*
|
|
* [p.275 of _The Lord of the Rings_, II/iii: "The Ring Goes South"]
|
|
*/
|
|
|
|
/* This file exists to #include "perl.h" _ONCE_ with
|
|
* PERL_IN_GLOBALS_C defined. That causes various global variables
|
|
* in perl.h and other files it includes to be _defined_ (and initialized)
|
|
* rather than just declared.
|
|
*/
|
|
|
|
#include "INTERN.h"
|
|
#define PERL_IN_GLOBALS_C
|
|
#include "perl.h"
|
|
|
|
/* regcomp.h * isn't #included in perl.h, as its only included within a
|
|
* few specific files such as regcomp.c, regexec.c. So include it
|
|
* explicitly to process any data declarations within it.
|
|
*/
|
|
#include "regcomp.h"
|
|
|
|
/* We need somewhere to declare this. This file seems a good place.
|
|
* This is not a regular "global" in that we don't know whether it needs to
|
|
* exist until we include threads.h, and we don't want it as part of any
|
|
* global struct (if that or something similar is re-introduced. */
|
|
|
|
#if defined(USE_ITHREADS) && defined(PERL_THREAD_LOCAL)
|
|
PERL_THREAD_LOCAL void *PL_current_context;
|
|
#endif
|
|
|
|
/*
|
|
* ex: set ts=8 sts=4 sw=4 et:
|
|
*/
|