From 939c178379c6d979f49a083a6f3cbabf7b10b479 Mon Sep 17 00:00:00 2001 From: Jeroen Ruigrok van der Werven Date: Sun, 26 Apr 2009 20:25:45 +0000 Subject: Merged revisions 71874,71882,71890 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r71874 | jeroen.ruigrok | 2009-04-25 13:59:09 +0200 (za, 25 apr 2009) | 2 lines First attempt to document PyObject_HEAD_INIT and PyVarObject_HEAD_INIT. ........ r71882 | jeroen.ruigrok | 2009-04-25 14:49:10 +0200 (za, 25 apr 2009) | 3 lines Issue #4239: adjust email examples not to use connect() and terminate with quit() and not close(). ........ r71890 | jeroen.ruigrok | 2009-04-25 15:07:40 +0200 (za, 25 apr 2009) | 3 lines Rewrite a sentence to be more in line with the rest of the documentation with regard to person and audience. ........ --- Doc/c-api/init.rst | 14 +++++++------- Doc/c-api/structures.rst | 19 ++++++++++++++++++- Doc/includes/email-alternative.py | 2 +- Doc/includes/email-dir.py | 3 +-- Doc/includes/email-mime.py | 3 +-- Doc/includes/email-simple.py | 3 +-- 6 files changed, 29 insertions(+), 15 deletions(-) diff --git a/Doc/c-api/init.rst b/Doc/c-api/init.rst index d3a2a3b..ab4734f 100644 --- a/Doc/c-api/init.rst +++ b/Doc/c-api/init.rst @@ -489,13 +489,13 @@ thread could immediately acquire the lock and store its own thread state in the global variable). Conversely, when acquiring the lock and restoring the thread state, the lock must be acquired before storing the thread state pointer. -Why am I going on with so much detail about this? Because when threads are -created from C, they don't have the global interpreter lock, nor is there a -thread state data structure for them. Such threads must bootstrap themselves -into existence, by first creating a thread state data structure, then acquiring -the lock, and finally storing their thread state pointer, before they can start -using the Python/C API. When they are done, they should reset the thread state -pointer, release the lock, and finally free their thread state data structure. +It is important to note that when threads are created from C, they don't have +the global interpreter lock, nor is there a thread state data structure for +them. Such threads must bootstrap themselves into existence, by first +creating a thread state data structure, then acquiring the lock, and finally +storing their thread state pointer, before they can start using the Python/C +API. When they are done, they should reset the thread state pointer, release +the lock, and finally free their thread state data structure. Threads can take advantage of the :cfunc:`PyGILState_\*` functions to do all of the above automatically. The typical idiom for calling into Python from a C diff --git a/Doc/c-api/structures.rst b/Doc/c-api/structures.rst index b654eb7..7048968 100644 --- a/Doc/c-api/structures.rst +++ b/Doc/c-api/structures.rst @@ -69,7 +69,24 @@ These macros are used in the definition of :ctype:`PyObject` and Note that :cmacro:`PyObject_HEAD` is part of the expansion, and that its own expansion varies depending on the definition of :cmacro:`Py_TRACE_REFS`. -.. cmacro:: PyObject_HEAD_INIT + +.. cmacro:: PyObject_HEAD_INIT(type) + + This is a macro which expands to initialization values for a new + :ctype:`PyObject` type. This macro expands to:: + + _PyObject_EXTRA_INIT + 1, type, + + +.. cmacro:: PyVarObject_HEAD_INIT(type, size) + + This is a macro which expands to initialization values for a new + :ctype:`PyVarObject` type, including the :attr:`ob_size` field. + This macro expands to:: + + _PyObject_EXTRA_INIT + 1, type, size, .. ctype:: PyCFunction diff --git a/Doc/includes/email-alternative.py b/Doc/includes/email-alternative.py index d941323..82e3ffa 100644 --- a/Doc/includes/email-alternative.py +++ b/Doc/includes/email-alternative.py @@ -45,4 +45,4 @@ s = smtplib.SMTP('localhost') # sendmail function takes 3 arguments: sender's address, recipient's address # and message to send - here it is sent as one string. s.sendmail(me, you, msg.as_string()) -s.close() +s.quit() diff --git a/Doc/includes/email-dir.py b/Doc/includes/email-dir.py index c04f57d..e67de61 100644 --- a/Doc/includes/email-dir.py +++ b/Doc/includes/email-dir.py @@ -106,9 +106,8 @@ must be running an SMTP server. fp.close() else: s = smtplib.SMTP() - s.connect() s.sendmail(opts.sender, opts.recipients, composed) - s.close() + s.quit() if __name__ == '__main__': diff --git a/Doc/includes/email-mime.py b/Doc/includes/email-mime.py index 5097253..f64df83 100644 --- a/Doc/includes/email-mime.py +++ b/Doc/includes/email-mime.py @@ -27,6 +27,5 @@ for file in pngfiles: # Send the email via our own SMTP server. s = smtplib.SMTP() -s.connect() s.sendmail(me, family, msg.as_string()) -s.close() +s.quit() diff --git a/Doc/includes/email-simple.py b/Doc/includes/email-simple.py index 44152a4..689511e 100644 --- a/Doc/includes/email-simple.py +++ b/Doc/includes/email-simple.py @@ -20,6 +20,5 @@ msg['To'] = you # Send the message via our own SMTP server, but don't include the # envelope header. s = smtplib.SMTP() -s.connect() s.sendmail(me, [you], msg.as_string()) -s.close() +s.quit() -- cgit v0.12