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.
........
parent 7c17d9be
...@@ -489,13 +489,13 @@ thread could immediately acquire the lock and store its own thread state in the ...@@ -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 global variable). Conversely, when acquiring the lock and restoring the thread
state, the lock must be acquired before storing the thread state pointer. 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 It is important to note that when threads are created from C, they don't have
created from C, they don't have the global interpreter lock, nor is there a the global interpreter lock, nor is there a thread state data structure for
thread state data structure for them. Such threads must bootstrap themselves them. Such threads must bootstrap themselves into existence, by first
into existence, by first creating a thread state data structure, then acquiring creating a thread state data structure, then acquiring the lock, and finally
the lock, and finally storing their thread state pointer, before they can start storing their thread state pointer, before they can start using the Python/C
using the Python/C API. When they are done, they should reset the thread state API. When they are done, they should reset the thread state pointer, release
pointer, release the lock, and finally free their thread state data structure. the lock, and finally free their thread state data structure.
Threads can take advantage of the :cfunc:`PyGILState_\*` functions to do all of 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 the above automatically. The typical idiom for calling into Python from a C
......
...@@ -69,7 +69,24 @@ These macros are used in the definition of :ctype:`PyObject` and ...@@ -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 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`. 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 .. ctype:: PyCFunction
......
...@@ -45,4 +45,4 @@ s = smtplib.SMTP('localhost') ...@@ -45,4 +45,4 @@ s = smtplib.SMTP('localhost')
# sendmail function takes 3 arguments: sender's address, recipient's address # sendmail function takes 3 arguments: sender's address, recipient's address
# and message to send - here it is sent as one string. # and message to send - here it is sent as one string.
s.sendmail(me, you, msg.as_string()) s.sendmail(me, you, msg.as_string())
s.close() s.quit()
...@@ -106,9 +106,8 @@ must be running an SMTP server. ...@@ -106,9 +106,8 @@ must be running an SMTP server.
fp.close() fp.close()
else: else:
s = smtplib.SMTP() s = smtplib.SMTP()
s.connect()
s.sendmail(opts.sender, opts.recipients, composed) s.sendmail(opts.sender, opts.recipients, composed)
s.close() s.quit()
if __name__ == '__main__': if __name__ == '__main__':
......
...@@ -27,6 +27,5 @@ for file in pngfiles: ...@@ -27,6 +27,5 @@ for file in pngfiles:
# Send the email via our own SMTP server. # Send the email via our own SMTP server.
s = smtplib.SMTP() s = smtplib.SMTP()
s.connect()
s.sendmail(me, family, msg.as_string()) s.sendmail(me, family, msg.as_string())
s.close() s.quit()
...@@ -20,6 +20,5 @@ msg['To'] = you ...@@ -20,6 +20,5 @@ msg['To'] = you
# Send the message via our own SMTP server, but don't include the # Send the message via our own SMTP server, but don't include the
# envelope header. # envelope header.
s = smtplib.SMTP() s = smtplib.SMTP()
s.connect()
s.sendmail(me, [you], msg.as_string()) s.sendmail(me, [you], msg.as_string())
s.close() s.quit()
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment