<HTML><BODY style="word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; "><BR><DIV><DIV>On Jun 25, 2006, at 1:08 PM, Brett Cannon wrote:</DIV><BR class="Apple-interchange-newline"><BLOCKQUOTE type="cite">On 6/24/06, <B class="gmail_sendername">Bob Ippolito</B> &lt;<A href="mailto:bob@redivi.com">bob@redivi.com</A>&gt; wrote:<DIV><SPAN class="gmail_quote"></SPAN><BLOCKQUOTE class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> <BR>On Jun 24, 2006, at 2:46 AM, Nick Coghlan wrote:<BR><BR>&gt; Brett Cannon wrote:<BR>&gt;&gt; Yep.  That API will be used directly in the changes to pymalloc and<BR>&gt;&gt; PyMem_*() macros (or at least the basic idea).  It is not *only* for <BR>&gt;&gt; extension modules but for the core as well.<BR>&gt;&gt;<BR>&gt;&gt;     Existing extension modules and existing C code in the Python<BR>&gt;&gt; interpreter<BR>&gt;&gt;     have no idea of any PyXXX_ calls, so I don't understand how <BR>&gt;&gt; new API<BR>&gt;&gt;     functions help here.<BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt; The calls get added to pymalloc and PyMem_*() under the hood, so that<BR>&gt;&gt; existing extension modules use the memory check automatically <BR>&gt;&gt; without a<BR>&gt;&gt; change.  The calls are just there in case some one has some random<BR>&gt;&gt; need<BR>&gt;&gt; to do their own malloc but still want to participate in the cap.<BR>&gt;&gt; Plus<BR>&gt;&gt; it helped me think everything through by giving everything I would <BR>&gt;&gt; need<BR>&gt;&gt; to change internally an API.<BR>&gt;<BR>&gt; This confused me a bit, too. It might help if you annotated each of<BR>&gt; the new<BR>&gt; API's with who the expected callers were:<BR>&gt;<BR>&gt;    - trusted interpreter <BR>&gt;    - untrusted interpreter<BR>&gt;    - embedding application<BR>&gt;    - extension module<BR><BR>Threading is definitely going to be an issue with multiple<BR>interpreters (restricted or otherwise)... for example, the PyGILState <BR>API probably wouldn't work anymore.</BLOCKQUOTE><DIV><BR><BR>PyGILState won't work because there are multiple interpreters period, or because of the introduced distinction of untrusted and trusted interpreters?  In other words, is this some new possible breakage, or is this an issue with threads that has always existed with multiple interpreters? <BR></DIV></DIV></BLOCKQUOTE><BR></DIV><DIV>It's an issue that's always existed with multiple interpreters, but multiple interpreters aren't really commonly used or tested at the moment so it's not very surprising.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>It would be kinda nice to have an interpreter-per-thread with no GIL like some of the other languages have, but the C API depends on too much global state for that...</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>-bob</DIV><DIV><BR class="khtml-block-placeholder"></DIV></BODY></HTML>