Hello community, here is the log from the commit of package sanlock for openSUSE:Factory checked in at 2018-03-30 11:59:27 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/sanlock (Old) and /work/SRC/openSUSE:Factory/.sanlock.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "sanlock" Fri Mar 30 11:59:27 2018 rev:18 rq:591650 version:3.6.0 Changes: -------- --- /work/SRC/openSUSE:Factory/sanlock/sanlock.changes 2017-12-12 21:16:57.451841183 +0100 +++ /work/SRC/openSUSE:Factory/.sanlock.new/sanlock.changes 2018-03-30 11:59:32.810821312 +0200 @@ -1,0 +2,22 @@ +Mon Mar 26 16:36:05 UTC 2018 - jfeh...@suse.com + +- Fix module initialization to work with both python2 and python3 + Updated sanlock-python3.patch + bsc#1076414 + +------------------------------------------------------------------- +Wed Mar 21 12:58:08 UTC 2018 - tchva...@suse.com + +- Add code to build with both python2 and python3 bindings with + provided condition so we can later on optionalize python2 builds + sanlock-python3.patch + bsc#1076414 + +------------------------------------------------------------------- +Wed Mar 21 12:44:29 UTC 2018 - tchva...@suse.com + +- Cleanup with spec-cleaner (only support SLE12 and newer) +- Add -fno-strict-aliasing to python subpkg +- Create rcsanlk-resetd link for the service control + +------------------------------------------------------------------- New: ---- sanlock-python3.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ sanlock.spec ++++++ --- /var/tmp/diff_new_pack.VsLmAn/_old 2018-03-30 11:59:33.538794986 +0200 +++ /var/tmp/diff_new_pack.VsLmAn/_new 2018-03-30 11:59:33.542794842 +0200 @@ -1,7 +1,7 @@ # # spec file for package sanlock # -# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -16,43 +16,24 @@ # -#Compat macro for new _fillupdir macro introduced in Nov 2017 -%if ! %{defined _fillupdir} - %define _fillupdir /var/adm/fillup-templates -%endif - %define with_fence_sanlockd 0 %define with_sanlk_reset 0 - %if 0%{?suse_version} > 1320 %define with_fence_sanlockd 1 %define with_sanlk_reset 1 %endif - +#Compat macro for new _fillupdir macro introduced in Nov 2017 +%if ! %{defined _fillupdir} + %define _fillupdir %{_localstatedir}/adm/fillup-templates +%endif +%bcond_without python2 Name: sanlock Version: 3.6.0 Release: 0 Summary: A shared disk lock manager -License: GPL-2.0 and GPL-2.0+ and LGPL-2.1+ +License: GPL-2.0-only AND GPL-2.0-or-later AND LGPL-2.1-or-later Group: System/Base - Url: https://pagure.io/sanlock -BuildRoot: %{_tmppath}/%{name}-%{version}-build -BuildRequires: libaio-devel -BuildRequires: libblkid-devel -BuildRequires: python -BuildRequires: python-devel -BuildRequires: systemd -%{?systemd_requires} -BuildRequires: xz -Requires(pre): %fillup_prereq -%if 0%{?suse_version} > 1320 -Requires(pre): group(disk) -%endif -Requires(pre): %{_sbindir}/groupadd -Requires(pre): %{_sbindir}/useradd -Requires: %{name}-lib = %{version}-%{release} -Recommends: logrotate Source0: %{name}-%{version}.tar.gz Source1: sysconfig.sanlock Source2: sysconfig.wdmd @@ -66,8 +47,20 @@ Patch104: suse-no-date-time.patch # bsc#1030060 Patch105: suse-fix-link-errors.patch - -%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)")} +Patch106: sanlock-python3.patch +BuildRequires: %{python_module devel} +BuildRequires: libaio-devel +BuildRequires: pkgconfig +BuildRequires: python-rpm-macros +BuildRequires: systemd-rpm-macros +BuildRequires: pkgconfig(blkid) +Requires(pre): %fillup_prereq +Requires(pre): shadow +Recommends: logrotate +%{?systemd_requires} +%if 0%{?suse_version} >= 1500 +Requires(pre): group(disk) +%endif %description sanlock uses disk paxos to manage leases on shared storage. @@ -75,25 +68,36 @@ access to the shared disks. %package -n libsanlock1 -Provides: sanlock-lib Summary: A shared disk lock manager library Group: Development/Libraries/C and C++ +Provides: sanlock-lib = %{version} %description -n libsanlock1 The runtime libraries for sanlock, a shared disk lock manager. Hosts connected to a common SAN can use this to synchronize their access to the shared disks. -%package -n python-%name +%package -n python2-%{name} +Summary: Python bindings for the sanlock library +Group: Development/Libraries/Python +Requires: libsanlock1 = %{version}-%{release} +Provides: python-%{name} Provides: sanlock-python + +%description -n python2-%{name} +A module that permits applications written in the Python programming +language to use the interface supplied by the sanlock library. + +%package -n python3-%{name} Summary: Python bindings for the sanlock library Group: Development/Libraries/Python Requires: libsanlock1 = %{version}-%{release} -%description -n python-%name +%description -n python3-%{name} A module that permits applications written in the Python programming language to use the interface supplied by the sanlock library. + %package devel Summary: Development files for %{name} Group: Development/Libraries/C and C++ @@ -131,69 +135,65 @@ %patch103 -p1 %patch104 -p1 %patch105 -p1 +%patch106 -p1 %build # upstream does not require configure # upstream does not support _smp_mflags -CFLAGS="%{optflags}" make -C wdmd -CFLAGS="%{optflags}" make -C src -CFLAGS="%{optflags}" make -C python +CFLAGS="%{optflags}" make -j1 -C wdmd +CFLAGS="%{optflags}" make -j1 -C src +pushd python +CFLAGS="%{optflags} -fno-strict-aliasing" %python_build +popd %if %{with_fence_sanlockd} -CFLAGS="%{optflags}" make -C fence_sanlock +CFLAGS="%{optflags}" make -j1 -C fence_sanlock %endif %if %{with_sanlk_reset} -CFLAGS="%{optflags}" make -C reset +CFLAGS="%{optflags}" make -j1 -C reset %endif %install -make -C src \ - install LIBDIR=%{_libdir} \ - DESTDIR="%{buildroot}" -make -C wdmd \ - install LIBDIR=%{_libdir} \ - DESTDIR="%{buildroot}" -make -C python \ - install LIBDIR=%{_libdir} \ - DESTDIR="%{buildroot}" PREFIX=%_prefix +%make_install LIBDIR=%{_libdir} -C src +%make_install LIBDIR=%{_libdir} -C wdmd +pushd python +%python_install +popd %if %{with_fence_sanlockd} -make -C fence_sanlock \ - install LIBDIR=%{_libdir} \ - DESTDIR="%{buildroot}" +%make_install LIBDIR=%{_libdir} -C fence_sanlock %endif %if %{with_sanlk_reset} -make -C reset \ - install LIBDIR=%{_libdir} \ - DESTDIR="%{buildroot}" +%make_install LIBDIR=%{_libdir} -C reset %endif install -D -m 644 src/sanlock.conf %{buildroot}/%{_sysconfdir}/sanlock/sanlock.conf -install -D -m 644 %SOURCE1 %{buildroot}/%{_fillupdir}/sysconfig.sanlock -install -D -m 644 %SOURCE2 %{buildroot}/%{_fillupdir}/sysconfig.wdmd +install -D -m 644 %{SOURCE1} %{buildroot}/%{_fillupdir}/sysconfig.sanlock +install -D -m 644 %{SOURCE2} %{buildroot}/%{_fillupdir}/sysconfig.wdmd install -D -m 644 init.d/sanlock.service %{buildroot}/%{_unitdir}/sanlock.service -ln -s /usr/sbin/service %{buildroot}%{_sbindir}/rcsanlock +ln -s service %{buildroot}%{_sbindir}/rcsanlock install -D -m 644 init.d/wdmd.service %{buildroot}/%{_unitdir}/wdmd.service -ln -s /usr/sbin/service %{buildroot}%{_sbindir}/rcwdmd +ln -s service %{buildroot}%{_sbindir}/rcwdmd %if %{with_fence_sanlockd} -install -D -m 0755 %SOURCE3 %{buildroot}/usr/lib/systemd/systemd-fence_sanlockd +install -D -m 0755 %{SOURCE3} %{buildroot}%{_prefix}/lib/systemd/systemd-fence_sanlockd install -D -m 0644 init.d/fence_sanlockd.service %{buildroot}/%{_unitdir}/fence_sanlockd.service -ln -s /usr/sbin/service %{buildroot}%{_sbindir}/rcfence_sanlockd +ln -s service %{buildroot}%{_sbindir}/rcfence_sanlockd %endif %if %{with_sanlk_reset} install -D -m 0644 init.d/sanlk-resetd.service %{buildroot}/%{_unitdir}/sanlk-resetd.service +ln -s service %{buildroot}%{_sbindir}/rcsanlk-resetd %endif install -Dm 0644 src/logrotate.sanlock \ - %{buildroot}/etc/logrotate.d/sanlock + %{buildroot}%{_sysconfdir}/logrotate.d/sanlock -install -Dd -m 0755 %{buildroot}/etc/wdmd.d +install -Dd -m 0755 %{buildroot}%{_sysconfdir}/wdmd.d %pre -%{_bindir}/getent group sanlock > /dev/null || %{_sbindir}/groupadd \ +getent group sanlock > /dev/null || groupadd \ -g 179 sanlock -%{_bindir}/getent passwd sanlock > /dev/null || %{_sbindir}/useradd \ +getent passwd sanlock > /dev/null || useradd \ -u 179 -c "sanlock" -s /sbin/nologin -r \ - -g 179 -G disk -d /var/run/sanlock sanlock + -g 179 -G disk -d %{_localstatedir}/run/sanlock sanlock %service_add_pre wdmd.service %service_add_pre sanlock.service @@ -215,15 +215,10 @@ %if %{with_fence_sanlockd} %post -n fence-sanlock %service_add_post fence_sanlockd.service -%restart_on_update fence_sanlockd -#if [ $1 -eq 1 ] ; then -#ccs_update_schema > /dev/null 2>&1 ||: -#fi %endif %post -n sanlk-reset %service_add_post sanlk-resetd.service -%restart_on_update sanlk-resetd %preun %service_del_preun wdmd.service sanlock.service @@ -238,7 +233,6 @@ %service_del_postun wdmd.service sanlock.service %postun -n libsanlock1 -p /sbin/ldconfig - %postun -n fence-sanlock %service_del_postun fence_sanlockd.service @@ -246,7 +240,6 @@ %service_del_postun sanlk-resetd.service %files -%defattr(-,root,root,-) %dir %attr(0700, root, root) %{_sysconfdir}/wdmd.d/ %dir %attr(0700, root, root) %{_sysconfdir}/sanlock/ %config(noreplace) %{_sysconfdir}/sanlock/sanlock.conf @@ -263,18 +256,19 @@ %config(noreplace) %{_sysconfdir}/logrotate.d/sanlock %files -n libsanlock1 -%defattr(-,root,root,-) %{_libdir}/libsanlock.so.* %{_libdir}/libsanlock_client.so.* %{_libdir}/libwdmd.so.* -%files -n python-%name -%defattr(-,root,root,-) -%{python_sitearch}/sanlock_python-%{version}_-py*.egg-info -%{python_sitearch}/sanlock.so +%if %{with python2} +%files -n python2-%{name} +%{python2_sitearch}/* +%endif + +%files -n python3-%{name} +%{python3_sitearch}/* %files devel -%defattr(-,root,root,-) %{_libdir}/libwdmd.so %{_includedir}/wdmd.h %{_libdir}/libsanlock.so @@ -289,9 +283,8 @@ %if %{with_fence_sanlockd} %files -n fence-sanlock -%defattr(-,root,root,-) %{_sbindir}/fence_sanlockd -/usr/lib/systemd/systemd-fence_sanlockd +%{_prefix}/lib/systemd/systemd-fence_sanlockd %{_unitdir}/fence_sanlockd.service %{_sbindir}/fence_sanlock %{_sbindir}/fence_sanlockd @@ -301,12 +294,12 @@ %if %{with_sanlk_reset} %files -n sanlk-reset -%defattr(-,root,root,-) %{_sbindir}/sanlk-reset %{_sbindir}/sanlk-resetd +%{_sbindir}/rcsanlk-resetd %{_unitdir}/sanlk-resetd.service -%{_mandir}/man8/sanlk-reset.8.gz -%{_mandir}/man8/sanlk-resetd.8.gz +%{_mandir}/man8/sanlk-reset.8%{?ext_man} +%{_mandir}/man8/sanlk-resetd.8%{?ext_man} %endif %changelog ++++++ sanlock-python3.patch ++++++ Index: sanlock-3.6.0/python/sanlock.c =================================================================== --- sanlock-3.6.0.orig/python/sanlock.c +++ sanlock-3.6.0/python/sanlock.c @@ -12,6 +12,10 @@ #include <sanlock_admin.h> #include <sanlock_direct.h> +#if PY_MAJOR_VERSION >= 3 +#define IS_PY3K +#endif + #ifndef __unused #define __unused __attribute__ ((unused)) #endif @@ -30,6 +34,17 @@ #define __neg_sets_exception #endif +struct module_state { + PyObject *error; +}; + +#ifdef IS_PY3K +#define GETSTATE(m) ((struct module_state*)PyModule_GetState(m)) +#else +#define GETSTATE(m) (&_state) +static struct module_state _state; +#endif + /* Functions prototypes */ static void __set_exception(int en, char *msg) __sets_exception; static int __parse_resource(PyObject *obj, struct sanlk_resource **res_ret) __neg_sets_exception; @@ -102,14 +117,27 @@ __parse_resource(PyObject *obj, struct s path = PyTuple_GetItem(tuple, 0); offset = PyTuple_GetItem(tuple, 1); +#ifdef IS_PY3K + p = PyBytes_AsString(path); +#else p = PyString_AsString(path); +#endif +#ifdef IS_PY3K + if (!PyLong_Check(offset)) { +#else if (!PyInt_Check(offset)) { +#endif __set_exception(EINVAL, "Invalid resource offset"); goto exit_fail; } +#ifdef IS_PY3K + } else if (PyBytes_Check(tuple)) { + p = PyBytes_AsString(tuple); +#else } else if (PyString_Check(tuple)) { p = PyString_AsString(tuple); +#endif } if (p == NULL) { @@ -122,7 +150,11 @@ __parse_resource(PyObject *obj, struct s if (offset == NULL) { res->disks[i].offset = 0; } else { +#ifdef IS_PY3K + res->disks[i].offset = PyLong_AsLong(offset); +#else res->disks[i].offset = PyInt_AsLong(offset); +#endif } } @@ -149,7 +181,11 @@ __hosts_to_list(struct sanlk_host *hss, goto exit_fail; /* fill the dictionary information: host_id */ +#ifdef IS_PY3K + if ((ls_value = PyLong_FromLong(hss[i].host_id)) == NULL) +#else if ((ls_value = PyInt_FromLong(hss[i].host_id)) == NULL) +#endif goto exit_fail; rv = PyDict_SetItemString(ls_entry, "host_id", ls_value); Py_DECREF(ls_value); @@ -157,7 +193,11 @@ __hosts_to_list(struct sanlk_host *hss, goto exit_fail; /* fill the dictionary information: generation */ +#ifdef IS_PY3K + if ((ls_value = PyLong_FromLong(hss[i].generation)) == NULL) +#else if ((ls_value = PyInt_FromLong(hss[i].generation)) == NULL) +#endif goto exit_fail; rv = PyDict_SetItemString(ls_entry, "generation", ls_value); Py_DECREF(ls_value); @@ -165,7 +205,11 @@ __hosts_to_list(struct sanlk_host *hss, goto exit_fail; /* fill the dictionary information: timestamp */ +#ifdef IS_PY3K + if ((ls_value = PyLong_FromLong(hss[i].timestamp)) == NULL) +#else if ((ls_value = PyInt_FromLong(hss[i].timestamp)) == NULL) +#endif goto exit_fail; rv = PyDict_SetItemString(ls_entry, "timestamp", ls_value); Py_DECREF(ls_value); @@ -173,7 +217,11 @@ __hosts_to_list(struct sanlk_host *hss, goto exit_fail; /* fill the dictionary information: io_timeout */ +#ifdef IS_PY3K + if ((ls_value = PyLong_FromLong(hss[i].io_timeout)) == NULL) +#else if ((ls_value = PyInt_FromLong(hss[i].io_timeout)) == NULL) +#endif goto exit_fail; rv = PyDict_SetItemString(ls_entry, "io_timeout", ls_value); Py_DECREF(ls_value); @@ -181,7 +229,11 @@ __hosts_to_list(struct sanlk_host *hss, goto exit_fail; /* fill the dictionary information: flags */ +#ifdef IS_PY3K + if ((ls_value = PyLong_FromLong(hss[i].flags)) == NULL) +#else if ((ls_value = PyInt_FromLong(hss[i].flags)) == NULL) +#endif goto exit_fail; rv = PyDict_SetItemString(ls_entry, "flags", ls_value); Py_DECREF(ls_value); @@ -220,7 +272,11 @@ py_register(PyObject *self __unused, PyO return NULL; } +#ifdef IS_PY3K + return PyLong_FromLong(sanlockfd); +#else return PyInt_FromLong(sanlockfd); +#endif } /* get_alignment */ @@ -253,7 +309,11 @@ py_get_alignment(PyObject *self __unused return NULL; } +#ifdef IS_PY3K + return PyLong_FromLong(rv); +#else return PyInt_FromLong(rv); +#endif } /* init_lockspace */ @@ -439,7 +499,11 @@ py_read_lockspace(PyObject *self __unuse goto exit_fail; /* fill the dictionary information: lockspace */ +#ifdef IS_PY3K + if ((ls_entry = PyBytes_FromString(ls.name)) == NULL) +#else if ((ls_entry = PyString_FromString(ls.name)) == NULL) +#endif goto exit_fail; rv = PyDict_SetItemString(ls_info, "lockspace", ls_entry); Py_DECREF(ls_entry); @@ -447,7 +511,11 @@ py_read_lockspace(PyObject *self __unuse goto exit_fail; /* fill the dictionary information: iotimeout */ +#ifdef IS_PY3K + if ((ls_entry = PyLong_FromLong(io_timeout)) == NULL) +#else if ((ls_entry = PyInt_FromLong(io_timeout)) == NULL) +#endif goto exit_fail; rv = PyDict_SetItemString(ls_info, "iotimeout", ls_entry); Py_DECREF(ls_entry); @@ -515,7 +583,11 @@ py_read_resource(PyObject *self __unused goto exit_fail; /* fill the dictionary information: lockspace */ +#ifdef IS_PY3K + if ((rs_entry = PyBytes_FromString(rs->lockspace_name)) == NULL) +#else if ((rs_entry = PyString_FromString(rs->lockspace_name)) == NULL) +#endif goto exit_fail; rv = PyDict_SetItemString(rs_info, "lockspace", rs_entry); Py_DECREF(rs_entry); @@ -523,7 +595,11 @@ py_read_resource(PyObject *self __unused goto exit_fail; /* fill the dictionary information: resource */ +#ifdef IS_PY3K + if ((rs_entry = PyBytes_FromString(rs->name)) == NULL) +#else if ((rs_entry = PyString_FromString(rs->name)) == NULL) +#endif goto exit_fail; rv = PyDict_SetItemString(rs_info, "resource", rs_entry); Py_DECREF(rs_entry); @@ -804,7 +880,11 @@ py_get_lockspaces(PyObject *self __unuse goto exit_fail; /* fill the dictionary information: lockspace */ +#ifdef IS_PY3K + if ((ls_value = PyBytes_FromString(lss[i].name)) == NULL) +#else if ((ls_value = PyString_FromString(lss[i].name)) == NULL) +#endif goto exit_fail; rv = PyDict_SetItemString(ls_entry, "lockspace", ls_value); Py_DECREF(ls_value); @@ -812,7 +892,11 @@ py_get_lockspaces(PyObject *self __unuse goto exit_fail; /* fill the dictionary information: host_id */ +#ifdef IS_PY3K + if ((ls_value = PyLong_FromLong(lss[i].host_id)) == NULL) +#else if ((ls_value = PyInt_FromLong(lss[i].host_id)) == NULL) +#endif goto exit_fail; rv = PyDict_SetItemString(ls_entry, "host_id", ls_value); Py_DECREF(ls_value); @@ -820,7 +904,11 @@ py_get_lockspaces(PyObject *self __unuse goto exit_fail; /* fill the dictionary information: path */ +#ifdef IS_PY3K + if ((ls_value = PyBytes_FromString(lss[i].host_id_disk.path)) == NULL) +#else if ((ls_value = PyString_FromString(lss[i].host_id_disk.path)) == NULL) +#endif goto exit_fail; rv = PyDict_SetItemString(ls_entry, "path", ls_value); Py_DECREF(ls_value); @@ -828,7 +916,11 @@ py_get_lockspaces(PyObject *self __unuse goto exit_fail; /* fill the dictionary information: offset */ +#ifdef IS_PY3K + if ((ls_value = PyLong_FromLong(lss[i].host_id_disk.offset)) == NULL) +#else if ((ls_value = PyInt_FromLong(lss[i].host_id_disk.offset)) == NULL) +#endif goto exit_fail; rv = PyDict_SetItemString(ls_entry, "offset", ls_value); Py_DECREF(ls_value); @@ -836,7 +928,11 @@ py_get_lockspaces(PyObject *self __unuse goto exit_fail; /* fill the dictionary information: flags */ +#ifdef IS_PY3K + if ((ls_value = PyLong_FromLong(lss[i].flags)) == NULL) +#else if ((ls_value = PyInt_FromLong(lss[i].flags)) == NULL) +#endif goto exit_fail; rv = PyDict_SetItemString(ls_entry, "flags", ls_value); Py_DECREF(ls_value); @@ -958,7 +1054,11 @@ py_acquire(PyObject *self __unused, PyOb /* prepare the resource version */ if (version != Py_None) { res->flags |= SANLK_RES_LVER; +#ifdef IS_PY3K + res->lver = PyLong_AsUnsignedLongMask(version); +#else res->lver = PyInt_AsUnsignedLongMask(version); +#endif if (res->lver == -1) { __set_exception(EINVAL, "Unable to convert the version value"); goto exit_fail; @@ -1074,7 +1174,11 @@ py_request(PyObject *self __unused, PyOb flags = SANLK_REQUEST_NEXT_LVER; } else { res->flags |= SANLK_RES_LVER; +#ifdef IS_PY3K + res->lver = PyLong_AsUnsignedLongMask(version); +#else res->lver = PyInt_AsUnsignedLongMask(version); +#endif if (res->lver == -1) { __set_exception(EINVAL, "Unable to convert the version value"); goto exit_fail; @@ -1189,7 +1293,11 @@ py_killpath(PyObject *self __unused, PyO size_t arg_len; item = PyList_GetItem(argslist, i); +#ifdef IS_PY3K + p = PyBytes_AsString(item); +#else p = PyString_AsString(item); +#endif if (p == NULL) { __set_exception(EINVAL, "Killpath argument not a string"); @@ -1578,32 +1686,83 @@ exit_fail: return excp; } +#ifdef IS_PY3K +static int sanlock_traverse(PyObject *m, visitproc visit, void *arg) { + Py_VISIT(GETSTATE(m)->error); + return 0; +} + +static int sanlock_clear(PyObject *m) { + Py_CLEAR(GETSTATE(m)->error); + return 0; +} + +static struct PyModuleDef moduledef = { + PyModuleDef_HEAD_INIT, + "sanlock", + pydoc_sanlock, + sizeof(struct module_state), + sanlock_methods, + NULL, + sanlock_traverse, + sanlock_clear, + NULL +}; + +#define INITERROR return NULL + +PyMODINIT_FUNC +PyInit_sanlock(void) + +#else +#define INITERROR return + PyMODINIT_FUNC initsanlock(void) +#endif { PyObject *py_module, *sk_constant; + struct module_state *st; +#ifdef IS_PY3K + py_module = PyModule_Create(&moduledef); +#else py_module = Py_InitModule4("sanlock", sanlock_methods, pydoc_sanlock, NULL, PYTHON_API_VERSION); +#endif if (py_module == NULL) - return; + INITERROR; py_exception = initexception(); - if (py_exception == NULL) - return; + if (py_exception == NULL) { + Py_DECREF(py_module); + INITERROR; + } + + st = GETSTATE(py_module); + st->error = py_exception; if (PyModule_AddObject(py_module, "SanlockException", py_exception) == 0) { Py_INCREF(py_exception); } +#ifdef IS_PY3K +#define PYSNLK_INIT_ADD_CONSTANT(x, y) \ + if ((sk_constant = PyLong_FromLong(x)) != NULL) { \ + if (PyModule_AddObject(py_module, y, sk_constant)) { \ + Py_DECREF(sk_constant); \ + } \ + } +#else #define PYSNLK_INIT_ADD_CONSTANT(x, y) \ if ((sk_constant = PyInt_FromLong(x)) != NULL) { \ if (PyModule_AddObject(py_module, y, sk_constant)) { \ Py_DECREF(sk_constant); \ } \ } +#endif /* lockspaces list flags */ PYSNLK_INIT_ADD_CONSTANT(SANLK_LSF_ADD, "LSFLAG_ADD"); @@ -1628,4 +1787,8 @@ initsanlock(void) PYSNLK_INIT_ADD_CONSTANT(SANLK_SETEV_ALL_HOSTS, "SETEV_ALL_HOSTS"); #undef PYSNLK_INIT_ADD_CONSTANT + +#ifdef IS_PY3K + return py_module; +#endif }