diff options
author | Oleg Pudeyev <code@olegp.name> | 2021-07-19 22:04:41 -0400 |
---|---|---|
committer | Oleg Pudeyev <code@olegp.name> | 2021-07-19 22:04:41 -0400 |
commit | ca843341d9892c943c0819e58ecdbdd80befe981 (patch) | |
tree | e4daa7a56167e36030bdce8890eefd49af42c4d2 | |
parent | f7421b8317b03383fffc7b9703db864110fc2444 (diff) | |
parent | 57890658e2add84062560516901ac012155e539f (diff) | |
download | pycurl-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.c | 24 | ||||
-rw-r--r-- | src/easyperform.c | 12 | ||||
-rw-r--r-- | src/module.c | 2 | ||||
-rw-r--r-- | src/multi.c | 4 |
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; |