py_tests = [
[ 'create ctrl object', files('tests/create-ctrl-obj.py') ],
+ [ 'SIGSEGV during gc', files('tests/gc.py') ],
]
foreach test: py_tests
description = test[0]
--- /dev/null
+#!/usr/bin/env python3
+# SPDX-License-Identifier: LGPL-2.1-or-later
+import gc
+import sys
+import pprint
+from libnvme import nvme
+
+root = nvme.root()
+root.log_level('debug')
+print(f'root: {root}')
+
+host = nvme.host(root)
+print(f'host: {host}')
+
+subsystem = host.subsystems()
+print(f'subsystem: {subsystem}')
+
+ctrls = []
+for i in range(10):
+ ctrl = nvme.ctrl(
+ root,
+ subsysnqn=nvme.NVME_DISC_SUBSYS_NAME,
+ transport='loop',
+ )
+ ctrls.append(ctrl)
+ print(f'ctrl {i}: {ctrl}')
+
+ns = subsystem.namespaces() if subsystem is not None else None
+print(f'ns: {ns}')
+
+# Deleting objects in the following order would create a segmentation
+# fault if it weren't for the %pythonappend in nvme.i. This test is to
+# make sure garbage collection is not impacted by object deletion order.
+root = None
+host = None
+
+gc.collect() # Force garbage collection before controller/subsystem objects get deleted
+
+ctrls = None
+subsystem= None
+ns = None