diff options
author | Peter Eisentraut | 2019-03-14 07:25:25 +0000 |
---|---|---|
committer | Peter Eisentraut | 2019-03-14 07:42:48 +0000 |
commit | 1226d932b4dadc39ba2f9a488e4d784443ea6a78 (patch) | |
tree | 9e6bb1e68733905d5deb4cd27836a8db6228d84f /contrib/jsonb_plpython | |
parent | 6eebfdc38b173edcd179f422cf7083383edb24bc (diff) |
Fix volatile vs. pointer confusion
Variables used after a longjmp() need to be declared volatile. In
case of a pointer, it's the pointer itself that needs to be declared
volatile, not the pointed-to value. So we need
PyObject *volatile items;
instead of
volatile PyObject *items; /* wrong */
Discussion: https://www.postgresql.org/message-id/flat/f747368d-9e1a-c46a-ac76-3c27da32e8e4%402ndquadrant.com
Diffstat (limited to 'contrib/jsonb_plpython')
-rw-r--r-- | contrib/jsonb_plpython/jsonb_plpython.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/contrib/jsonb_plpython/jsonb_plpython.c b/contrib/jsonb_plpython/jsonb_plpython.c index f44d364c97c..1bc984d5c4d 100644 --- a/contrib/jsonb_plpython/jsonb_plpython.c +++ b/contrib/jsonb_plpython/jsonb_plpython.c @@ -237,17 +237,14 @@ PLyMapping_ToJsonbValue(PyObject *obj, JsonbParseState **jsonb_state) JsonbValue *out = NULL; /* We need it volatile, since we use it after longjmp */ - volatile PyObject *items_v = NULL; + PyObject *volatile items = NULL; pcount = PyMapping_Size(obj); - items_v = PyMapping_Items(obj); + items = PyMapping_Items(obj); PG_TRY(); { Py_ssize_t i; - PyObject *items; - - items = (PyObject *) items_v; pushJsonbValue(jsonb_state, WJB_BEGIN_OBJECT, NULL); @@ -279,7 +276,7 @@ PLyMapping_ToJsonbValue(PyObject *obj, JsonbParseState **jsonb_state) } PG_CATCH(); { - Py_DECREF(items_v); + Py_DECREF(items); PG_RE_THROW(); } PG_END_TRY(); |