Mercurial > cpython-lru_cache-weakref
annotate Modules/_multiprocessing/connection.h @ 79675:c0a2294de787 2.7
Issue #16199: Backport 2to3 typo fix from 3.2.
| author | Chris Jerdonek <chris.jerdonek@gmail.com> |
|---|---|
| date | Thu, 11 Oct 2012 16:15:46 -0700 |
| parents | b36cb4602e21 |
| children |
| rev | line source |
|---|---|
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
1 /* |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
2 * Definition of a `Connection` type. |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
3 * Used by `socket_connection.c` and `pipe_connection.c`. |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
4 * |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
5 * connection.h |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
6 * |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
7 * Copyright (c) 2006-2008, R Oudkerk --- see COPYING.txt |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
8 */ |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
9 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
10 #ifndef CONNECTION_H |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
11 #define CONNECTION_H |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
12 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
13 /* |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
14 * Read/write flags |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
15 */ |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
16 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
17 #define READABLE 1 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
18 #define WRITABLE 2 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
19 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
20 #define CHECK_READABLE(self) \ |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
21 if (!(self->flags & READABLE)) { \ |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
22 PyErr_SetString(PyExc_IOError, "connection is write-only"); \ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
23 return NULL; \ |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
24 } |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
25 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
26 #define CHECK_WRITABLE(self) \ |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
27 if (!(self->flags & WRITABLE)) { \ |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
28 PyErr_SetString(PyExc_IOError, "connection is read-only"); \ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
29 return NULL; \ |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
30 } |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
31 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
32 /* |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
33 * Allocation and deallocation |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
34 */ |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
35 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
36 static PyObject * |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
37 connection_new(PyTypeObject *type, PyObject *args, PyObject *kwds) |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
38 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
39 ConnectionObject *self; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
40 HANDLE handle; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
41 BOOL readable = TRUE, writable = TRUE; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
42 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
43 static char *kwlist[] = {"handle", "readable", "writable", NULL}; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
44 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
45 if (!PyArg_ParseTupleAndKeywords(args, kwds, F_HANDLE "|ii", kwlist, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
46 &handle, &readable, &writable)) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
47 return NULL; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
48 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
49 if (handle == INVALID_HANDLE_VALUE || (Py_ssize_t)handle < 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
50 PyErr_Format(PyExc_IOError, "invalid handle %zd", |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
51 (Py_ssize_t)handle); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
52 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
53 } |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
54 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
55 if (!readable && !writable) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
56 PyErr_SetString(PyExc_ValueError, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
57 "either readable or writable must be true"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
58 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
59 } |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
60 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
61 self = PyObject_New(ConnectionObject, type); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
62 if (self == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
63 return NULL; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
64 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
65 self->weakreflist = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
66 self->handle = handle; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
67 self->flags = 0; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
68 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
69 if (readable) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
70 self->flags |= READABLE; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
71 if (writable) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
72 self->flags |= WRITABLE; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
73 assert(self->flags >= 1 && self->flags <= 3); |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
74 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
75 return (PyObject*)self; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
76 } |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
77 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
78 static void |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
79 connection_dealloc(ConnectionObject* self) |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
80 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
81 if (self->weakreflist != NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
82 PyObject_ClearWeakRefs((PyObject*)self); |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
83 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
84 if (self->handle != INVALID_HANDLE_VALUE) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
85 Py_BEGIN_ALLOW_THREADS |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
86 CLOSE(self->handle); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
87 Py_END_ALLOW_THREADS |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
88 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
89 PyObject_Del(self); |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
90 } |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
91 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
92 /* |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
93 * Functions for transferring buffers |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
94 */ |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
95 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
96 static PyObject * |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
97 connection_sendbytes(ConnectionObject *self, PyObject *args) |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
98 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
99 char *buffer; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
100 Py_ssize_t length, offset=0, size=PY_SSIZE_T_MIN; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
101 int res; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
102 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
103 if (!PyArg_ParseTuple(args, F_RBUFFER "#|" F_PY_SSIZE_T F_PY_SSIZE_T, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
104 &buffer, &length, &offset, &size)) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
105 return NULL; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
106 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
107 CHECK_WRITABLE(self); |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
108 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
109 if (offset < 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
110 PyErr_SetString(PyExc_ValueError, "offset is negative"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
111 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
112 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
113 if (length < offset) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
114 PyErr_SetString(PyExc_ValueError, "buffer length < offset"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
115 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
116 } |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
117 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
118 if (size == PY_SSIZE_T_MIN) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
119 size = length - offset; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
120 } else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
121 if (size < 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
122 PyErr_SetString(PyExc_ValueError, "size is negative"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
123 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
124 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
125 if (offset + size > length) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
126 PyErr_SetString(PyExc_ValueError, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
127 "buffer length < offset + size"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
128 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
129 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
130 } |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
131 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
132 res = conn_send_string(self, buffer + offset, size); |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
133 |
|
61463
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61262
diff
changeset
|
134 if (res < 0) { |
|
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61262
diff
changeset
|
135 if (PyErr_Occurred()) |
|
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61262
diff
changeset
|
136 return NULL; |
|
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61262
diff
changeset
|
137 else |
|
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61262
diff
changeset
|
138 return mp_SetError(PyExc_IOError, res); |
|
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61262
diff
changeset
|
139 } |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
140 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
141 Py_RETURN_NONE; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
142 } |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
143 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
144 static PyObject * |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
145 connection_recvbytes(ConnectionObject *self, PyObject *args) |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
146 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
147 char *freeme = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
148 Py_ssize_t res, maxlength = PY_SSIZE_T_MAX; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
149 PyObject *result = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
150 |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
151 if (!PyArg_ParseTuple(args, "|" F_PY_SSIZE_T, &maxlength)) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
152 return NULL; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
153 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
154 CHECK_READABLE(self); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
155 |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
156 if (maxlength < 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
157 PyErr_SetString(PyExc_ValueError, "maxlength < 0"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
158 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
159 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
160 |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
161 res = conn_recv_string(self, self->buffer, CONNECTION_BUFFER_SIZE, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
162 &freeme, maxlength); |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
163 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
164 if (res < 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
165 if (res == MP_BAD_MESSAGE_LENGTH) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
166 if ((self->flags & WRITABLE) == 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
167 Py_BEGIN_ALLOW_THREADS |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
168 CLOSE(self->handle); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
169 Py_END_ALLOW_THREADS |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
170 self->handle = INVALID_HANDLE_VALUE; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
171 } else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
172 self->flags = WRITABLE; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
173 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
174 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
175 mp_SetError(PyExc_IOError, res); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
176 } else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
177 if (freeme == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
178 result = PyString_FromStringAndSize(self->buffer, res); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
179 } else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
180 result = PyString_FromStringAndSize(freeme, res); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
181 PyMem_Free(freeme); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
182 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
183 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
184 |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
185 return result; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
186 } |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
187 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
188 static PyObject * |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
189 connection_recvbytes_into(ConnectionObject *self, PyObject *args) |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
190 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
191 char *freeme = NULL, *buffer = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
192 Py_ssize_t res, length, offset = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
193 PyObject *result = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
194 Py_buffer pbuf; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
195 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
196 CHECK_READABLE(self); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
197 |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
198 if (!PyArg_ParseTuple(args, "w*|" F_PY_SSIZE_T, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
199 &pbuf, &offset)) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
200 return NULL; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
201 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
202 buffer = pbuf.buf; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
203 length = pbuf.len; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
204 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
205 if (offset < 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
206 PyErr_SetString(PyExc_ValueError, "negative offset"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
207 goto _error; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
208 } |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
209 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
210 if (offset > length) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
211 PyErr_SetString(PyExc_ValueError, "offset too large"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
212 goto _error; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
213 } |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
214 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
215 res = conn_recv_string(self, buffer+offset, length-offset, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
216 &freeme, PY_SSIZE_T_MAX); |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
217 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
218 if (res < 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
219 if (res == MP_BAD_MESSAGE_LENGTH) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
220 if ((self->flags & WRITABLE) == 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
221 Py_BEGIN_ALLOW_THREADS |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
222 CLOSE(self->handle); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
223 Py_END_ALLOW_THREADS |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
224 self->handle = INVALID_HANDLE_VALUE; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
225 } else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
226 self->flags = WRITABLE; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
227 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
228 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
229 mp_SetError(PyExc_IOError, res); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
230 } else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
231 if (freeme == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
232 result = PyInt_FromSsize_t(res); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
233 } else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
234 result = PyObject_CallFunction(BufferTooShort, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
235 F_RBUFFER "#", |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
236 freeme, res); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
237 PyMem_Free(freeme); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
238 if (result) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
239 PyErr_SetObject(BufferTooShort, result); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
240 Py_DECREF(result); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
241 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
242 goto _error; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
243 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
244 } |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
245 |
|
48221
b8c4bf393794
Issue #3139: Make buffer-interface thread-safe wrt. PyArg_ParseTuple,
Martin v. Löwis <martin@v.loewis.de>
parents:
48125
diff
changeset
|
246 _cleanup: |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
247 PyBuffer_Release(&pbuf); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
248 return result; |
|
48221
b8c4bf393794
Issue #3139: Make buffer-interface thread-safe wrt. PyArg_ParseTuple,
Martin v. Löwis <martin@v.loewis.de>
parents:
48125
diff
changeset
|
249 |
|
b8c4bf393794
Issue #3139: Make buffer-interface thread-safe wrt. PyArg_ParseTuple,
Martin v. Löwis <martin@v.loewis.de>
parents:
48125
diff
changeset
|
250 _error: |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
251 result = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
252 goto _cleanup; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
253 } |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
254 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
255 /* |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
256 * Functions for transferring objects |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
257 */ |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
258 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
259 static PyObject * |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
260 connection_send_obj(ConnectionObject *self, PyObject *obj) |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
261 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
262 char *buffer; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
263 int res; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
264 Py_ssize_t length; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
265 PyObject *pickled_string = NULL; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
266 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
267 CHECK_WRITABLE(self); |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
268 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
269 pickled_string = PyObject_CallFunctionObjArgs(pickle_dumps, obj, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
270 pickle_protocol, NULL); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
271 if (!pickled_string) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
272 goto failure; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
273 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
274 if (PyString_AsStringAndSize(pickled_string, &buffer, &length) < 0) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
275 goto failure; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
276 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
277 res = conn_send_string(self, buffer, (int)length); |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
278 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
279 if (res < 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
280 mp_SetError(PyExc_IOError, res); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
281 goto failure; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
282 } |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
283 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
284 Py_XDECREF(pickled_string); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
285 Py_RETURN_NONE; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
286 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
287 failure: |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
288 Py_XDECREF(pickled_string); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
289 return NULL; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
290 } |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
291 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
292 static PyObject * |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
293 connection_recv_obj(ConnectionObject *self) |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
294 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
295 char *freeme = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
296 Py_ssize_t res; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
297 PyObject *temp = NULL, *result = NULL; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
298 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
299 CHECK_READABLE(self); |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
300 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
301 res = conn_recv_string(self, self->buffer, CONNECTION_BUFFER_SIZE, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
302 &freeme, PY_SSIZE_T_MAX); |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
303 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
304 if (res < 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
305 if (res == MP_BAD_MESSAGE_LENGTH) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
306 if ((self->flags & WRITABLE) == 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
307 Py_BEGIN_ALLOW_THREADS |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
308 CLOSE(self->handle); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
309 Py_END_ALLOW_THREADS |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
310 self->handle = INVALID_HANDLE_VALUE; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
311 } else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
312 self->flags = WRITABLE; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
313 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
314 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
315 mp_SetError(PyExc_IOError, res); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
316 } else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
317 if (freeme == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
318 temp = PyString_FromStringAndSize(self->buffer, res); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
319 } else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
320 temp = PyString_FromStringAndSize(freeme, res); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
321 PyMem_Free(freeme); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
322 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
323 } |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
324 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
325 if (temp) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
326 result = PyObject_CallFunctionObjArgs(pickle_loads, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
327 temp, NULL); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
328 Py_XDECREF(temp); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
329 return result; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
330 } |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
331 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
332 /* |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
333 * Other functions |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
334 */ |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
335 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
336 static PyObject * |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
337 connection_poll(ConnectionObject *self, PyObject *args) |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
338 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
339 PyObject *timeout_obj = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
340 double timeout = 0.0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
341 int res; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
342 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
343 CHECK_READABLE(self); |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
344 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
345 if (!PyArg_ParseTuple(args, "|O", &timeout_obj)) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
346 return NULL; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
347 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
348 if (timeout_obj == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
349 timeout = 0.0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
350 } else if (timeout_obj == Py_None) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
351 timeout = -1.0; /* block forever */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
352 } else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
353 timeout = PyFloat_AsDouble(timeout_obj); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
354 if (PyErr_Occurred()) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
355 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
356 if (timeout < 0.0) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
357 timeout = 0.0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
358 } |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
359 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
360 Py_BEGIN_ALLOW_THREADS |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
361 res = conn_poll(self, timeout, _save); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
362 Py_END_ALLOW_THREADS |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
363 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
364 switch (res) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
365 case TRUE: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
366 Py_RETURN_TRUE; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
367 case FALSE: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
368 Py_RETURN_FALSE; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
369 default: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
370 return mp_SetError(PyExc_IOError, res); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
371 } |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
372 } |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
373 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
374 static PyObject * |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
375 connection_fileno(ConnectionObject* self) |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
376 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
377 if (self->handle == INVALID_HANDLE_VALUE) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
378 PyErr_SetString(PyExc_IOError, "handle is invalid"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
379 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
380 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
381 return PyInt_FromLong((long)self->handle); |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
382 } |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
383 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
384 static PyObject * |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
385 connection_close(ConnectionObject *self) |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
386 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
387 if (self->handle != INVALID_HANDLE_VALUE) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
388 Py_BEGIN_ALLOW_THREADS |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
389 CLOSE(self->handle); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
390 Py_END_ALLOW_THREADS |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
391 self->handle = INVALID_HANDLE_VALUE; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
392 } |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
393 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
394 Py_RETURN_NONE; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
395 } |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
396 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
397 static PyObject * |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
398 connection_repr(ConnectionObject *self) |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
399 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
400 static char *conn_type[] = {"read-only", "write-only", "read-write"}; |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
401 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
402 assert(self->flags >= 1 && self->flags <= 3); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
403 return FROM_FORMAT("<%s %s, handle %zd>", |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
404 conn_type[self->flags - 1], |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
405 CONNECTION_NAME, (Py_ssize_t)self->handle); |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
406 } |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
407 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
408 /* |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
409 * Getters and setters |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
410 */ |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
411 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
412 static PyObject * |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
413 connection_closed(ConnectionObject *self, void *closure) |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
414 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
415 return PyBool_FromLong((long)(self->handle == INVALID_HANDLE_VALUE)); |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
416 } |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
417 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
418 static PyObject * |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
419 connection_readable(ConnectionObject *self, void *closure) |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
420 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
421 return PyBool_FromLong((long)(self->flags & READABLE)); |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
422 } |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
423 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
424 static PyObject * |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
425 connection_writable(ConnectionObject *self, void *closure) |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
426 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
427 return PyBool_FromLong((long)(self->flags & WRITABLE)); |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
428 } |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
429 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
430 /* |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
431 * Tables |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
432 */ |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
433 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
434 static PyMethodDef connection_methods[] = { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
435 {"send_bytes", (PyCFunction)connection_sendbytes, METH_VARARGS, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
436 "send the byte data from a readable buffer-like object"}, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
437 {"recv_bytes", (PyCFunction)connection_recvbytes, METH_VARARGS, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
438 "receive byte data as a string"}, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
439 {"recv_bytes_into",(PyCFunction)connection_recvbytes_into,METH_VARARGS, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
440 "receive byte data into a writeable buffer-like object\n" |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
441 "returns the number of bytes read"}, |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
442 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
443 {"send", (PyCFunction)connection_send_obj, METH_O, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
444 "send a (picklable) object"}, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
445 {"recv", (PyCFunction)connection_recv_obj, METH_NOARGS, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
446 "receive a (picklable) object"}, |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
447 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
448 {"poll", (PyCFunction)connection_poll, METH_VARARGS, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
449 "whether there is any input available to be read"}, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
450 {"fileno", (PyCFunction)connection_fileno, METH_NOARGS, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
451 "file descriptor or handle of the connection"}, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
452 {"close", (PyCFunction)connection_close, METH_NOARGS, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
453 "close the connection"}, |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
454 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
455 {NULL} /* Sentinel */ |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
456 }; |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
457 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
458 static PyGetSetDef connection_getset[] = { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
459 {"closed", (getter)connection_closed, NULL, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
460 "True if the connection is closed", NULL}, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
461 {"readable", (getter)connection_readable, NULL, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
462 "True if the connection is readable", NULL}, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
463 {"writable", (getter)connection_writable, NULL, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
464 "True if the connection is writable", NULL}, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
465 {NULL} |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
466 }; |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
467 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
468 /* |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
469 * Connection type |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
470 */ |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
471 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
472 PyDoc_STRVAR(connection_doc, |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
473 "Connection type whose constructor signature is\n\n" |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
474 " Connection(handle, readable=True, writable=True).\n\n" |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
475 "The constructor does *not* duplicate the handle."); |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
476 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
477 PyTypeObject CONNECTION_TYPE = { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
478 PyVarObject_HEAD_INIT(NULL, 0) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
479 /* tp_name */ "_multiprocessing." CONNECTION_NAME, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
480 /* tp_basicsize */ sizeof(ConnectionObject), |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
481 /* tp_itemsize */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
482 /* tp_dealloc */ (destructor)connection_dealloc, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
483 /* tp_print */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
484 /* tp_getattr */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
485 /* tp_setattr */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
486 /* tp_compare */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
487 /* tp_repr */ (reprfunc)connection_repr, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
488 /* tp_as_number */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
489 /* tp_as_sequence */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
490 /* tp_as_mapping */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
491 /* tp_hash */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
492 /* tp_call */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
493 /* tp_str */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
494 /* tp_getattro */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
495 /* tp_setattro */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
496 /* tp_as_buffer */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
497 /* tp_flags */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
498 Py_TPFLAGS_HAVE_WEAKREFS, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
499 /* tp_doc */ connection_doc, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
500 /* tp_traverse */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
501 /* tp_clear */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
502 /* tp_richcompare */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
503 /* tp_weaklistoffset */ offsetof(ConnectionObject, weakreflist), |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
504 /* tp_iter */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
505 /* tp_iternext */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
506 /* tp_methods */ connection_methods, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
507 /* tp_members */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
508 /* tp_getset */ connection_getset, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
509 /* tp_base */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
510 /* tp_dict */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
511 /* tp_descr_get */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
512 /* tp_descr_set */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
513 /* tp_dictoffset */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
514 /* tp_init */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
515 /* tp_alloc */ 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52445
diff
changeset
|
516 /* tp_new */ connection_new, |
|
47577
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
517 }; |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
518 |
|
4511ecd25634
add the multiprocessing package to fulfill PEP 371
Benjamin Peterson <benjamin@python.org>
parents:
diff
changeset
|
519 #endif /* CONNECTION_H */ |
