]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
fix: use Py_REFCNT macro to work with free-threaded python
authorWouter Deconinck <wdconinc@gmail.com>
Wed, 24 Dec 2025 21:49:34 +0000 (15:49 -0600)
committerWouter Deconinck <wdconinc@gmail.com>
Thu, 8 Jan 2026 17:21:42 +0000 (11:21 -0600)
configure.ac
libmount/python/fs.c
libmount/python/tab.c

index 9fafeed04751d9525bce1a0f4fde64d6a26a5a3a..6de222e8429955f73f15ecbb60fd8febe76e0291 100644 (file)
@@ -2850,6 +2850,9 @@ AC_ARG_WITH([python],
   [], [with_python=check withval=check]
 )
 
+# Minimum required Python version defined by use of Py_REFCNT
+m4_define([MIN_PYTHON_VER], [2.6])
+
 have_python=no
 have_libpython=no
 AS_IF([test "x$with_python" != xno], [
@@ -2870,6 +2873,9 @@ AS_IF([test "x$with_python" != xno], [
     [*:yes],
        # check for python development stuff
        [
+         AX_COMPARE_VERSION([$PYTHON_VERSION], [lt], [MIN_PYTHON_VER],
+           [AC_MSG_ERROR([python version $PYTHON_VERSION is too old])])
+
          PKG_CHECK_MODULES([PYTHON], [python-$PYTHON_VERSION], [have_libpython=yes], [have_libpython=no])
 
          # https://github.com/util-linux/util-linux/issues/2366
index cb48c43a187f93b81f67f5e572741b70b94cc5e7..0ec52aeede1924d2d0f55d58817439251b6f8923 100644 (file)
@@ -640,7 +640,7 @@ static PyMethodDef Fs_methods[] = {
 static void Fs_destructor(FsObject *self)
 {
        DBG(FS, pymnt_debug_h(self->fs, "destructor py-obj: %p, py-refcnt=%d",
-                               self, (int) ((PyObject *) self)->ob_refcnt));
+                               self, (int) Py_REFCNT((PyObject *) self)));
        mnt_unref_fs(self->fs);
        PyFree(self);
 }
@@ -774,7 +774,7 @@ PyObject *PyObjectResultFs(struct libmnt_fs *fs)
        if (result) {
                Py_INCREF(result);
                DBG(FS, pymnt_debug_h(fs, "result py-obj %p: already exists, py-refcnt=%d",
-                               result, (int) ((PyObject *) result)->ob_refcnt));
+                               result, (int) Py_REFCNT((PyObject *) result)));
                return (PyObject *) result;
        }
 
@@ -792,7 +792,7 @@ PyObject *PyObjectResultFs(struct libmnt_fs *fs)
        mnt_ref_fs(fs);
 
        DBG(FS, pymnt_debug_h(fs, "result py-obj %p new, py-refcnt=%d",
-                               result, (int) ((PyObject *) result)->ob_refcnt));
+                               result, (int) Py_REFCNT((PyObject *) result)));
        result->fs = fs;
        mnt_fs_set_userdata(fs, result);
        return (PyObject *) result;
index 14a39da85db7b4c7345c08273cbe4211e0400980..8b7e75e6a7494d0d57af85735e2486cb426f1950 100644 (file)
@@ -548,7 +548,7 @@ void Table_unref(struct libmnt_table *tab)
 static void Table_destructor(TableObject *self)
 {
        DBG(TAB, pymnt_debug_h(self->tab, "destructor py-obj: %p, py-refcnt=%d",
-                               self, (int) ((PyObject *) self)->ob_refcnt));
+                               self, (int) Py_REFCNT((PyObject *) self)));
        Table_unref(self->tab);
        self->tab = NULL;
 
@@ -683,7 +683,7 @@ PyObject *PyObjectResultTab(struct libmnt_table *tab)
        if (result) {
                Py_INCREF(result);
                DBG(TAB, pymnt_debug_h(tab, "result py-obj %p: already exists, py-refcnt=%d",
-                               result, (int) ((PyObject *) result)->ob_refcnt));
+                               result, (int) Py_REFCNT((PyObject *) result)));
                return (PyObject *) result;
        }
 
@@ -701,7 +701,7 @@ PyObject *PyObjectResultTab(struct libmnt_table *tab)
        mnt_ref_table(tab);
 
        DBG(TAB, pymnt_debug_h(tab, "result py-obj %p new, py-refcnt=%d",
-                               result, (int) ((PyObject *) result)->ob_refcnt));
+                               result, (int) Py_REFCNT((PyObject *) result)));
        result->tab = tab;
        result->iter = mnt_new_iter(MNT_ITER_FORWARD);
        mnt_table_set_userdata(result->tab, result);