Author: Armin Rigo <ar...@tunes.org> Branch: portable-threadlocal Changeset: r74635:d8c6c988cd8c Date: 2014-11-22 19:10 +0100 http://bitbucket.org/pypy/pypy/changeset/d8c6c988cd8c/
Log: Clean up rstack.{py,c,h} by removing an obscure conditional include diff --git a/rpython/rlib/rstack.py b/rpython/rlib/rstack.py --- a/rpython/rlib/rstack.py +++ b/rpython/rlib/rstack.py @@ -1,6 +1,6 @@ """ This file defines utilities for manipulating the stack in an -RPython-compliant way, intended mostly for use by the Stackless PyPy. +RPython-compliant way. It is mainly about the stack_check() function. """ import py @@ -10,18 +10,11 @@ from rpython.rlib import rgc from rpython.rtyper.lltypesystem import lltype, rffi from rpython.rtyper.lltypesystem.lloperation import llop -from rpython.translator import cdir -from rpython.translator.tool.cbuild import ExternalCompilationInfo # ____________________________________________________________ -srcdir = py.path.local(cdir) / 'src' -compilation_info = ExternalCompilationInfo( - includes=['src/stack.h'], - separate_module_files=[srcdir / 'stack.c', srcdir / 'threadlocal.c']) - def llexternal(name, args, res, _callable=None): - return rffi.llexternal(name, args, res, compilation_info=compilation_info, + return rffi.llexternal(name, args, res, sandboxsafe=True, _nowrapper=True, _callable=_callable) diff --git a/rpython/translator/c/genc.py b/rpython/translator/c/genc.py --- a/rpython/translator/c/genc.py +++ b/rpython/translator/c/genc.py @@ -707,22 +707,21 @@ print >> f, "#endif" def gen_threadlocal_structdef(f, database): + from rpython.translator.c.support import cdecl + print >> f bk = database.translator.annotator.bookkeeper - if bk.thread_local_fields: - from rpython.translator.c.support import cdecl - print >> f - fields = list(bk.thread_local_fields) - fields.sort(key=lambda field: field.fieldname) - print >> f, '#define RPY_HAS_THREADLOCAL_S' - for field in fields: - print >> f, ('#define RPY_TLOFS_%s offsetof(' % field.fieldname + - 'struct pypy_threadlocal_s, %s)' % field.fieldname) - print >> f, 'struct pypy_threadlocal_s {' - for field in fields: - typename = database.gettype(field.FIELDTYPE) - print >> f, '\t%s;' % cdecl(typename, field.fieldname) - print >> f, '};' - print >> f + fields = list(bk.thread_local_fields) + fields.sort(key=lambda field: field.fieldname) + for field in fields: + print >> f, ('#define RPY_TLOFS_%s offsetof(' % field.fieldname + + 'struct pypy_threadlocal_s, %s)' % field.fieldname) + print >> f, 'struct pypy_threadlocal_s {' + print >> f, '\tchar *stack_end;' + for field in fields: + typename = database.gettype(field.FIELDTYPE) + print >> f, '\t%s;' % cdecl(typename, field.fieldname) + print >> f, '};' + print >> f def gen_forwarddecl(f, database): print >> f, '/***********************************************************/' @@ -794,6 +793,7 @@ srcdir / 'asm.c', srcdir / 'instrument.c', srcdir / 'int.c', + srcdir / 'stack.c', srcdir / 'threadlocal.c', ] if _CYGWIN: diff --git a/rpython/translator/c/src/g_include.h b/rpython/translator/c/src/g_include.h --- a/rpython/translator/c/src/g_include.h +++ b/rpython/translator/c/src/g_include.h @@ -19,6 +19,8 @@ #include "src/address.h" #include "src/unichar.h" #include "src/llgroup.h" +#include "src/stack.h" +#include "src/threadlocal.h" #include "src/instrument.h" #include "src/asm.h" @@ -48,7 +50,3 @@ #ifdef __CYGWIN__ #include "src/cygwin_wait.h" #endif - -#ifdef RPY_HAS_THREADLOCAL_S -#include "src/threadlocal.h" -#endif diff --git a/rpython/translator/c/src/stack.c b/rpython/translator/c/src/stack.c --- a/rpython/translator/c/src/stack.c +++ b/rpython/translator/c/src/stack.c @@ -1,6 +1,8 @@ /* Stack operation */ +#include "common_header.h" +#include "structdef.h" /* for struct pypy_threadlocal_s */ #include <src/stack.h> -#include <src/thread.h> +#include <src/threadlocal.h> #include <stdio.h> @@ -9,7 +11,6 @@ char *_LLstacktoobig_stack_end = NULL; long _LLstacktoobig_stack_length = MAX_STACK_SIZE; char _LLstacktoobig_report_error = 1; -static RPyThreadStaticTLS end_tls_key; void LL_stack_set_length_fraction(double fraction) { @@ -20,6 +21,8 @@ { long diff, max_stack_size; char *baseptr, *curptr = (char*)current; + char *tl; + struct pypy_threadlocal_s *tl1; /* The stack_end variable is updated to match the current value if it is still 0 or if we later find a 'curptr' position @@ -27,15 +30,9 @@ thread-local storage, but we try to minimize its overhead by keeping a local copy in _LLstacktoobig_stack_end. */ - if (_LLstacktoobig_stack_end == NULL) { - /* not initialized */ - /* XXX We assume that initialization is performed early, - when there is still only one thread running. This - allows us to ignore race conditions here */ - RPyThreadStaticTLS_Create(&end_tls_key); - } - - baseptr = (char *) RPyThreadStaticTLS_Get(end_tls_key); + OP_THREADLOCALREF_ADDR(tl); + tl1 = (struct pypy_threadlocal_s *)tl; + baseptr = tl1->stack_end; max_stack_size = _LLstacktoobig_stack_length; if (baseptr == NULL) { /* first time we see this thread */ @@ -58,7 +55,7 @@ /* update the stack base pointer to the current value */ baseptr = curptr; - RPyThreadStaticTLS_Set(end_tls_key, baseptr); + tl1->stack_end = baseptr; _LLstacktoobig_stack_end = baseptr; return 0; } diff --git a/rpython/translator/c/src/stack.h b/rpython/translator/c/src/stack.h --- a/rpython/translator/c/src/stack.h +++ b/rpython/translator/c/src/stack.h @@ -2,14 +2,13 @@ /************************************************************/ /*** C header subsection: stack operations ***/ +#include <src/precommondefs.h> + + #ifndef MAX_STACK_SIZE # define MAX_STACK_SIZE (3 << 18) /* 768 kb */ #endif -/* This include must be done in any case to initialise - * the header dependencies early (winsock2, before windows.h). - * It is needed to have RPyThreadStaticTLS, too. */ -#include "threadlocal.h" RPY_EXTERN char *_LLstacktoobig_stack_end; RPY_EXTERN long _LLstacktoobig_stack_length; diff --git a/rpython/translator/c/src/threadlocal.c b/rpython/translator/c/src/threadlocal.c --- a/rpython/translator/c/src/threadlocal.c +++ b/rpython/translator/c/src/threadlocal.c @@ -1,14 +1,10 @@ #include "common_header.h" -#include "structdef.h" - -#ifdef RPY_HAS_THREADLOCAL_S /* otherwise, this file is not needed */ - +#include "structdef.h" /* for struct pypy_threadlocal_s */ #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include "src/threadlocal.h" -#include "src/thread.h" #ifdef _WIN32 @@ -103,6 +99,3 @@ /* ------------------------------------------------------------ */ #endif /* ------------------------------------------------------------ */ - - -#endif /* RPY_HAS_THREADLOCAL_S */ diff --git a/rpython/translator/c/src/threadlocal.h b/rpython/translator/c/src/threadlocal.h --- a/rpython/translator/c/src/threadlocal.h +++ b/rpython/translator/c/src/threadlocal.h @@ -5,11 +5,6 @@ #include <src/precommondefs.h> -#ifndef RPY_HAS_THREADLOCAL_S -# error "src/threadlocal.h should only be included if RPY_HAS_THREADLOCAL_S" -#endif - - /* ------------------------------------------------------------ */ #ifdef USE___THREAD /* ------------------------------------------------------------ */ _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit