Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Subinterpreters]: use static variable under building Python with --with-experimental-isolated-subinterpreters cause crash. #87754

Closed
JunyiXie mannequin opened this issue Mar 22, 2021 · 16 comments
Labels
3.10 only security fixes topic-subinterpreters type-crash A hard crash of the interpreter, possibly with a core dump

Comments

@JunyiXie
Copy link
Mannequin

JunyiXie mannequin commented Mar 22, 2021

BPO 43588
Nosy @vstinner, @corona10, @shihai1991, @JunyiXie, @kumaraditya303
PRs
  • bpo-43588: use static variable module under building Python with --with-experimental-isolated-subinterpreters cause crash. #24963
  • bpo-43551: fix PyImport_Import use static silly_list, under building Python with --with-experimental-isolated-subinterpreters share silly_list in multi sub interpreters cause crash. #24929
  • bpo-43588: fix exceptions.c use static variable under building Python with --with-experimental-isolated-subinterpreters may cause crash. #24965
  • bpo-43588: fix boolobject.c static variables under building under building Python with --with-experimental-isolated-subinterpreters may cause crash #24966
  • bpo-43588: fix codeobject.c static variables under building under building Python with --with-experimental-isolated-subinterpreters may cause crash. #24968
  • bpo-43588: fix sysmodule.c use static variables under building under building Python with --with-experimental-isolated-subinterpreters may cause crash #24969
  • bpo-43588: fix codecs.c static variables under building under building Python with --with-experimental-isolated-subinterpreters may cause crash. #24970
  • bpo-43588: fix _warnings.c static variables under building under building Python with --with-experimental-isolated-subinterpreters may cause crash #24971
  • bpo-43588: fix listobject.c use static variables under building under building Python with --with-experimental-isolated-subinterpreters may cause crash #24972
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = None
    created_at = <Date 2021-03-22.08:09:32.063>
    labels = ['expert-subinterpreters', '3.10', 'type-crash']
    title = '[Subinterpreters]: use static variable under building Python with --with-experimental-isolated-subinterpreters cause crash.'
    updated_at = <Date 2022-04-07.08:17:57.850>
    user = 'https://github.com/JunyiXie'

    bugs.python.org fields:

    activity = <Date 2022-04-07.08:17:57.850>
    actor = 'kumaraditya'
    assignee = 'none'
    closed = False
    closed_date = None
    closer = None
    components = ['Subinterpreters']
    creation = <Date 2021-03-22.08:09:32.063>
    creator = 'JunyiXie'
    dependencies = []
    files = []
    hgrepos = []
    issue_num = 43588
    keywords = ['patch']
    message_count = 13.0
    messages = ['389282', '389284', '389292', '389300', '389304', '389310', '389311', '389322', '389323', '389324', '406069', '406080', '416918']
    nosy_count = 5.0
    nosy_names = ['vstinner', 'corona10', 'shihai1991', 'JunyiXie', 'kumaraditya']
    pr_nums = ['24963', '24929', '24965', '24966', '24968', '24969', '24970', '24971', '24972']
    priority = 'normal'
    resolution = None
    stage = 'patch review'
    status = 'open'
    superseder = None
    type = 'crash'
    url = 'https://bugs.python.org/issue43588'
    versions = ['Python 3.10']

    @JunyiXie
    Copy link
    Mannequin Author

    JunyiXie mannequin commented Mar 22, 2021

    use static module variable under building Python with --with-experimental-isolated-subinterpreters cause crash.
    compiler_mod(struct compiler *c, mod_ty mod)
    {
        PyCodeObject *co;
        int addNone = 1;
        static PyObject *module;
        if (!module) {
            module = PyUnicode_InternFromString("<module>");
            if (!module)
                return NULL;
        }
    ...
    }

    @JunyiXie JunyiXie mannequin added 3.10 only security fixes topic-subinterpreters type-crash A hard crash of the interpreter, possibly with a core dump labels Mar 22, 2021
    @JunyiXie
    Copy link
    Mannequin Author

    JunyiXie mannequin commented Mar 22, 2021

    43551 [Subinterpreters]: PyImport_Import use static silly_list under building Python with --with-experimental-isolated-subinterpreters share silly_list in multi subinterpreters cause crash.
    https://bugs.python.org/issue43551

    @JunyiXie
    Copy link
    Mannequin Author

    JunyiXie mannequin commented Mar 22, 2021

    grep -E 'static (\w+) \(\w+) =' $(find . -name "*.c") | wc -l
    67 static variable may need fix
    ➜ cpython git:(master) grep -E 'static (\w+) \
    (\w+) =' $(find . -name "*.c")
    ./PC/winreg.c:static char *failMsg = "bad operand type";
    ./Python/codecs.c:static _PyUnicode_Name_CAPI *ucnhash_capi = NULL;
    ./Python/initconfig.c:static char *_Py_StandardStreamEncoding = NULL;
    ./Python/initconfig.c:static char *_Py_StandardStreamErrors = NULL;
    ./Python/import.c:static PyObject *extensions = NULL;
    ./Python/import.c: static PyObject *builtins_str = NULL;
    ./Python/import.c: static PyObject *import_str = NULL;
    ./Python/sysmodule.c: static PyObject *newline = NULL;
    ./Python/_warnings.c: static PyObject *importlib_string = NULL;
    ./Python/_warnings.c: static PyObject *bootstrap_string = NULL;
    ./Objects/unicodeobject.c:static _PyUnicode_Name_CAPI *ucnhash_capi = NULL;
    ./Objects/codeobject.c: static PyObject *emptystring = NULL;
    ./Objects/codeobject.c: static PyObject *nulltuple = NULL;
    ./Objects/listobject.c:static PyObject *indexerr = NULL;
    ./Objects/exceptions.c: static PyObject *print_prefix = NULL;
    ./Objects/exceptions.c: static PyObject *exec_prefix = NULL;
    ./Objects/boolobject.c:static PyObject *false_str = NULL;
    ./Objects/boolobject.c:static PyObject *true_str = NULL;
    ./Parser/pegen.c: static void *cache = NULL;
    ./Modules/_cursesmodule.c:static char *screen_encoding = NULL;
    ./Modules/arraymodule.c: static PyObject *array_reconstructor = NULL;
    ./Modules/_tkinter.c: static PyObject *tcl_library_path = NULL;
    ./Modules/_tkinter.c:static PyThreadState *tcl_tstate = NULL;
    ./Modules/_tkinter.c:static PyThreadState *event_tstate = NULL;
    ./Modules/syslogmodule.c:static PyObject *S_ident_o = NULL; /* identifier, held by openlog() */
    ./Modules/_tracemalloc.c:static PyObject *unknown_filename = NULL;
    ./Modules/_tracemalloc.c:static _Py_hashtable_t *tracemalloc_filenames = NULL;
    ./Modules/_tracemalloc.c:static traceback_t *tracemalloc_traceback = NULL;
    ./Modules/_tracemalloc.c:static _Py_hashtable_t *tracemalloc_tracebacks = NULL;
    ./Modules/_tracemalloc.c:static _Py_hashtable_t *tracemalloc_traces = NULL;
    ./Modules/_tracemalloc.c:static _Py_hashtable_t *tracemalloc_domains = NULL;
    ./Modules/_ssl.c: static PyObject *x509_asn = NULL;
    ./Modules/_ssl.c: static PyObject *pkcs_7_asn = NULL;
    ./Modules/_ssl.c:static PyThread_type_lock *_ssl_locks = NULL;
    ./Modules/_testbuffer.c:static PyObject *structmodule = NULL;
    ./Modules/_testbuffer.c:static PyObject *Struct = NULL;
    ./Modules/_testbuffer.c:static PyObject *calcsize = NULL;
    ./Modules/_testbuffer.c:static PyObject *simple_format = NULL;
    ./Modules/_testbuffer.c:static char *infobuf = NULL;
    ./Modules/_io/bufferedio.c: static PyObject *eintr_int = NULL;
    ./Modules/_asynciomodule.c:static futureiterobject *fi_freelist = NULL;
    ./Modules/_zoneinfo.c:static PyObject *io_open = NULL;
    ./Modules/_zoneinfo.c:static PyObject *_tzpath_find_tzfile = NULL;
    ./Modules/_zoneinfo.c:static PyObject *_common_mod = NULL;
    ./Modules/_zoneinfo.c:static PyObject *TIMEDELTA_CACHE = NULL;
    ./Modules/_zoneinfo.c:static PyObject *ZONEINFO_WEAK_CACHE = NULL;
    ./Modules/_zoneinfo.c:static StrongCacheNode *ZONEINFO_STRONG_CACHE = NULL;
    ./Modules/_sqlite/microprotocols.c:static PyObject *psyco_adapters = NULL;
    ./Modules/_ssl/debughelpers.c: static PyThread_type_lock *lock = NULL;
    ./Modules/_datetimemodule.c:static PyObject *us_per_ms = NULL; /* 1000 */
    ./Modules/_datetimemodule.c:static PyObject *us_per_second = NULL; /* 1000000 */
    ./Modules/_datetimemodule.c:static PyObject *us_per_minute = NULL; /* 1e6 * 60 as Python int */
    ./Modules/_datetimemodule.c:static PyObject *us_per_hour = NULL; /* 1e6 * 3600 as Python int */
    ./Modules/_datetimemodule.c:static PyObject *us_per_day = NULL; /* 1e6 * 3600 * 24 as Python int */
    ./Modules/_datetimemodule.c:static PyObject *us_per_week = NULL; /* 1e6*3600*24*7 as Python int */
    ./Modules/_datetimemodule.c:static PyObject *seconds_per_day = NULL; /* 3600*24 as Python int */
    ./Modules/_datetimemodule.c: static PyObject *module = NULL;
    ./Modules/_decimal/_decimal.c:static PyObject *tls_context_key = NULL;
    ./Modules/_decimal/_decimal.c:static PyDecContextObject *cached_context = NULL;
    ./Modules/_decimal/_decimal.c:static PyObject *current_context_var = NULL;
    ./Modules/_decimal/_decimal.c:static PyObject *default_context_template = NULL;
    ./Modules/_decimal/_decimal.c:static PyObject *basic_context_template = NULL;
    ./Modules/_decimal/_decimal.c:static PyObject *extended_context_template = NULL;
    ./Modules/_decimal/_decimal.c:static PyObject *DecimalException = NULL;
    ./Modules/_decimal/_decimal.c:static PyObject *Rational = NULL;
    ./Modules/_decimal/_decimal.c:static PyTypeObject *DecimalTuple = NULL;
    ./Modules/_decimal/_decimal.c: static PyObject *capsule = NULL;

    @JunyiXie
    Copy link
    Mannequin Author

    JunyiXie mannequin commented Mar 22, 2021

    fix
    ./Objects/exceptions.c: static PyObject *print_prefix = NULL;
    ./Objects/exceptions.c: static PyObject *exec_prefix = NULL;

    #24965

    @vstinner
    Copy link
    Member

    Oh. I didn't expect so many "static" variables. I suggest to wait until a PEP is accepted for running multiple interpreters in parallel.

    @JunyiXie
    Copy link
    Mannequin Author

    JunyiXie mannequin commented Mar 22, 2021

    Okay, I will fix these problems first. (Need for your own project)

    @JunyiXie
    Copy link
    Mannequin Author

    JunyiXie mannequin commented Mar 22, 2021

    -> Okay, I will fix these problems first. (Need for my own project)

    @JunyiXie
    Copy link
    Mannequin Author

    JunyiXie mannequin commented Mar 22, 2021

    I will fix the static variable problem of frequently used code

    @corona10
    Copy link
    Member

    @JunyiXie

    Please wait your patch until the PEP is approved.

    @vstinner
    Copy link
    Member

    Until the PEP is accepted, you can start working on a branch if you want. You can post the link to your branch.

    @JunyiXie
    Copy link
    Mannequin Author

    JunyiXie mannequin commented Nov 10, 2021

    About PEP
    How is the progress? Where can I track it? Is there any relevant plan?
    thanks

    @vstinner
    Copy link
    Member

    So far, no PEP has been written.

    @kumaraditya303
    Copy link
    Contributor

    kumaraditya303 commented Apr 7, 2022

    Most of the static variables were removed by #31366 so I closed those PRs as they were outdated, however some static variable still exist.

    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
    @ezio-melotti ezio-melotti moved this to Todo in Subinterpreters Apr 15, 2022
    @erlend-aasland
    Copy link
    Contributor

    Most of the static variables were removed by #75547 so I closed those PRs as they were outdated, however some static variable still exist.

    Kumar, I think you linked to the incorrect issue or PR. Would you mind updating it with the correct number?

    @kumaraditya303
    Copy link
    Contributor

    Kumar, I think you linked to the incorrect issue or PR. Would you mind updating it with the correct number?

    Good catch Erlend! Thanks I updated the PR number, I wonder if it was a C&P error on my end or the Github migration caused it.

    @corona10
    Copy link
    Member

    corona10 commented Oct 21, 2022

    The configuration was removed by @ericsnowcurrently
    see: #93185
    We can close this issue.

    Repository owner moved this from Todo to Done in Subinterpreters Oct 21, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    3.10 only security fixes topic-subinterpreters type-crash A hard crash of the interpreter, possibly with a core dump
    Projects
    Status: Done
    Development

    No branches or pull requests

    4 participants