summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleg Pudeyev <code@olegp.name>2021-07-19 22:04:41 -0400
committerOleg Pudeyev <code@olegp.name>2021-07-19 22:04:41 -0400
commitca843341d9892c943c0819e58ecdbdd80befe981 (patch)
treee4daa7a56167e36030bdce8890eefd49af42c4d2
parentf7421b8317b03383fffc7b9703db864110fc2444 (diff)
parent57890658e2add84062560516901ac012155e539f (diff)
downloadpycurl-ca843341d9892c943c0819e58ecdbdd80befe981.tar.gz
Merge branch 'python-3.9', closes #671
* python-3.9: fix null argument to PyObject_Call properly condition PyEval_InitThreads replace deprecated functions, hopefully
-rw-r--r--src/easycb.c24
-rw-r--r--src/easyperform.c12
-rw-r--r--src/module.c2
-rw-r--r--src/multi.c4
4 files changed, 26 insertions, 16 deletions
diff --git a/src/easycb.c b/src/easycb.c
index 5266464..047e6f7 100644
--- a/src/easycb.c
+++ b/src/easycb.c
@@ -42,7 +42,7 @@ util_write_callback(int flags, char *ptr, size_t size, size_t nmemb, void *strea
#endif
if (arglist == NULL)
goto verbose_error;
- result = PyEval_CallObject(cb, arglist);
+ result = PyObject_Call(cb, arglist, NULL);
Py_DECREF(arglist);
if (result == NULL)
goto verbose_error;
@@ -184,7 +184,7 @@ opensocket_callback(void *clientp, curlsocktype purpose,
Py_DECREF(converted_address);
goto verbose_error;
}
- python_address = PyEval_CallObject(curl_sockaddr_type, arglist);
+ python_address = PyObject_Call(curl_sockaddr_type, arglist, NULL);
Py_DECREF(arglist);
if (python_address == NULL) {
goto verbose_error;
@@ -195,7 +195,7 @@ opensocket_callback(void *clientp, curlsocktype purpose,
Py_DECREF(python_address);
goto verbose_error;
}
- result = PyEval_CallObject(self->opensocket_cb, arglist);
+ result = PyObject_Call(self->opensocket_cb, arglist, NULL);
Py_DECREF(arglist);
if (result == NULL) {
goto verbose_error;
@@ -257,7 +257,7 @@ sockopt_cb(void *clientp, curl_socket_t curlfd, curlsocktype purpose)
if (arglist == NULL)
goto verbose_error;
- ret_obj = PyEval_CallObject(self->sockopt_cb, arglist);
+ ret_obj = PyObject_Call(self->sockopt_cb, arglist, NULL);
Py_DECREF(arglist);
if (!PyInt_Check(ret_obj) && !PyLong_Check(ret_obj)) {
PyObject *ret_repr = PyObject_Repr(ret_obj);
@@ -309,7 +309,7 @@ closesocket_callback(void *clientp, curl_socket_t curlfd)
if (arglist == NULL)
goto verbose_error;
- ret_obj = PyEval_CallObject(self->closesocket_cb, arglist);
+ ret_obj = PyObject_Call(self->closesocket_cb, arglist, NULL);
Py_DECREF(arglist);
if (!ret_obj)
goto silent_error;
@@ -410,7 +410,7 @@ ssh_key_cb(CURL *easy, const struct curl_khkey *knownkey,
if (arglist == NULL)
goto verbose_error;
- ret_obj = PyEval_CallObject(self->ssh_key_cb, arglist);
+ ret_obj = PyObject_Call(self->ssh_key_cb, arglist, NULL);
Py_DECREF(arglist);
if (!PyInt_Check(ret_obj) && !PyLong_Check(ret_obj)) {
PyObject *ret_repr = PyObject_Repr(ret_obj);
@@ -488,7 +488,7 @@ seek_callback(void *stream, curl_off_t offset, int origin)
arglist = Py_BuildValue("(L,i)", (PY_LONG_LONG) offset, source);
if (arglist == NULL)
goto verbose_error;
- result = PyEval_CallObject(cb, arglist);
+ result = PyObject_Call(cb, arglist, NULL);
Py_DECREF(arglist);
if (result == NULL)
goto verbose_error;
@@ -554,7 +554,7 @@ read_callback(char *ptr, size_t size, size_t nmemb, void *stream)
arglist = Py_BuildValue("(i)", total_size);
if (arglist == NULL)
goto verbose_error;
- result = PyEval_CallObject(self->r_cb, arglist);
+ result = PyObject_Call(self->r_cb, arglist, NULL);
Py_DECREF(arglist);
if (result == NULL)
goto verbose_error;
@@ -662,7 +662,7 @@ progress_callback(void *stream,
arglist = Py_BuildValue("(dddd)", dltotal, dlnow, ultotal, ulnow);
if (arglist == NULL)
goto verbose_error;
- result = PyEval_CallObject(self->pro_cb, arglist);
+ result = PyObject_Call(self->pro_cb, arglist, NULL);
Py_DECREF(arglist);
if (result == NULL)
goto verbose_error;
@@ -715,7 +715,7 @@ xferinfo_callback(void *stream,
(PY_LONG_LONG) ultotal, (PY_LONG_LONG) ulnow);
if (arglist == NULL)
goto verbose_error;
- result = PyEval_CallObject(self->xferinfo_cb, arglist);
+ result = PyObject_Call(self->xferinfo_cb, arglist, NULL);
Py_DECREF(arglist);
if (result == NULL)
goto verbose_error;
@@ -775,7 +775,7 @@ debug_callback(CURL *curlobj, curl_infotype type,
#endif
if (arglist == NULL)
goto verbose_error;
- result = PyEval_CallObject(self->debug_cb, arglist);
+ result = PyObject_Call(self->debug_cb, arglist, NULL);
Py_DECREF(arglist);
if (result == NULL)
goto verbose_error;
@@ -816,7 +816,7 @@ ioctl_callback(CURL *curlobj, int cmd, void *stream)
arglist = Py_BuildValue("(i)", cmd);
if (arglist == NULL)
goto verbose_error;
- result = PyEval_CallObject(self->ioctl_cb, arglist);
+ result = PyObject_Call(self->ioctl_cb, arglist, NULL);
Py_DECREF(arglist);
if (result == NULL)
goto verbose_error;
diff --git a/src/easyperform.c b/src/easyperform.c
index b36c20c..44f21c0 100644
--- a/src/easyperform.c
+++ b/src/easyperform.c
@@ -28,7 +28,17 @@ do_curl_perform_rb(CurlObject *self)
{
PyObject *v, *io;
- io = PyEval_CallObject(bytesio, NULL);
+ /* NOTE: this tuple is never freed. */
+ static PyObject *empty_tuple = NULL;
+
+ if (empty_tuple == NULL) {
+ empty_tuple = PyTuple_New(0);
+ if (empty_tuple == NULL) {
+ return NULL;
+ }
+ }
+
+ io = PyObject_Call(bytesio, empty_tuple, NULL);
if (io == NULL) {
return NULL;
}
diff --git a/src/module.c b/src/module.c
index 4f52f62..128559a 100644
--- a/src/module.c
+++ b/src/module.c
@@ -1500,7 +1500,7 @@ initpycurl(void)
Py_DECREF(arglist);
PyDict_SetItemString(d, "CurlSockAddr", curl_sockaddr_type);
-#ifdef WITH_THREAD
+#if defined(WITH_THREAD) && (PY_MINOR_VERSION < 3 || PY_MINOR_VERSION == 3 && PY_MINOR_VERSION < 9)
/* Finally initialize global interpreter lock */
PyEval_InitThreads();
#endif
diff --git a/src/multi.c b/src/multi.c
index 4bade73..1ec5e19 100644
--- a/src/multi.c
+++ b/src/multi.c
@@ -199,7 +199,7 @@ multi_socket_callback(CURL *easy,
arglist = Py_BuildValue("(iiOO)", what, s, userp, (PyObject *)socketp);
if (arglist == NULL)
goto verbose_error;
- result = PyEval_CallObject(self->s_cb, arglist);
+ result = PyObject_Call(self->s_cb, arglist, NULL);
Py_DECREF(arglist);
if (result == NULL)
goto verbose_error;
@@ -243,7 +243,7 @@ multi_timer_callback(CURLM *multi,
arglist = Py_BuildValue("(i)", timeout_ms);
if (arglist == NULL)
goto verbose_error;
- result = PyEval_CallObject(self->t_cb, arglist);
+ result = PyObject_Call(self->t_cb, arglist, NULL);
Py_DECREF(arglist);
if (result == NULL)
goto verbose_error;