From nobody Sun Feb 8 05:41:02 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1491316313991812.994030152534; Tue, 4 Apr 2017 07:31:53 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2132FC04BD3B; Tue, 4 Apr 2017 14:31:52 +0000 (UTC) Received: from colo-mx.corp.redhat.com (unknown [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id DFCBD90C70; Tue, 4 Apr 2017 14:31:51 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 998AB5EC66; Tue, 4 Apr 2017 14:31:51 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v34EVmqF025034 for ; Tue, 4 Apr 2017 10:31:48 -0400 Received: by smtp.corp.redhat.com (Postfix) id AD0AA8FE55; Tue, 4 Apr 2017 14:31:48 +0000 (UTC) Received: from dhcp-17-113.lcy.redhat.com (unknown [10.42.17.113]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9E13A92058; Tue, 4 Apr 2017 14:31:47 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 2132FC04BD3B Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 2132FC04BD3B From: "Daniel P. Berrange" To: libvir-list@redhat.com Date: Tue, 4 Apr 2017 15:31:32 +0100 Message-Id: <20170404143134.12141-6-berrange@redhat.com> In-Reply-To: <20170404143134.12141-1-berrange@redhat.com> References: <20170404143134.12141-1-berrange@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Cc: Wojtek Porczyk Subject: [libvirt] [PATCH v3 5/7] event-test: unregister callbacks & close conn on exit X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Tue, 04 Apr 2017 14:31:53 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" In order to test cleanup code paths we must unregister all callbacks and close the connection on shutdown. Since cleanup happens in the background, we do a short sleep to allow the main loop to run its cleanup too. Signed-off-by: Daniel P. Berrange --- examples/event-test.py | 95 +++++++++++++++++++++++++++++++---------------= ---- 1 file changed, 59 insertions(+), 36 deletions(-) diff --git a/examples/event-test.py b/examples/event-test.py index 751a140..ac9fbe1 100755 --- a/examples/event-test.py +++ b/examples/event-test.py @@ -702,42 +702,47 @@ def main(): =20 #Add 2 lifecycle callbacks to prove this works with more than just one vc.domainEventRegister(myDomainEventCallback1,None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_LIFECYCLE,= myDomainEventCallback2, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_REBOOT, my= DomainEventRebootCallback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_RTC_CHANGE= , myDomainEventRTCChangeCallback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_WATCHDOG, = myDomainEventWatchdogCallback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR, = myDomainEventIOErrorCallback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_GRAPHICS, = myDomainEventGraphicsCallback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_R= EASON, myDomainEventIOErrorReasonCallback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_CONTROL_ER= ROR, myDomainEventControlErrorCallback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_BLOCK_JOB,= myDomainEventBlockJobCallback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_DISK_CHANG= E, myDomainEventDiskChangeCallback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_TRAY_CHANG= E, myDomainEventTrayChangeCallback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_PMWAKEUP, = myDomainEventPMWakeupCallback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_PMSUSPEND,= myDomainEventPMSuspendCallback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_BALLOON_CH= ANGE, myDomainEventBalloonChangeCallback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_PMSUSPEND_= DISK, myDomainEventPMSuspendDiskCallback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_DEVICE_REM= OVED, myDomainEventDeviceRemovedCallback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_BLOCK_JOB_= 2, myDomainEventBlockJob2Callback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_TUNABLE, m= yDomainEventTunableCallback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_AGENT_LIFE= CYCLE, myDomainEventAgentLifecycleCallback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_DEVICE_ADD= ED, myDomainEventDeviceAddedCallback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_MIGRATION_= ITERATION, myDomainEventMigrationIteration, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_JOB_COMPLE= TED, myDomainEventJobCompletedCallback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_DEVICE_REM= OVAL_FAILED, myDomainEventDeviceRemovalFailedCallback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_METADATA_C= HANGE, myDomainEventMetadataChangeCallback, None) - vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_BLOCK_THRE= SHOLD, myDomainEventBlockThresholdCallback, None) - - vc.networkEventRegisterAny(None, libvirt.VIR_NETWORK_EVENT_ID_LIFECYCL= E, myNetworkEventLifecycleCallback, None) - - vc.storagePoolEventRegisterAny(None, libvirt.VIR_STORAGE_POOL_EVENT_ID= _LIFECYCLE, myStoragePoolEventLifecycleCallback, None) - vc.storagePoolEventRegisterAny(None, libvirt.VIR_STORAGE_POOL_EVENT_ID= _REFRESH, myStoragePoolEventRefreshCallback, None) - - vc.nodeDeviceEventRegisterAny(None, libvirt.VIR_NODE_DEVICE_EVENT_ID_L= IFECYCLE, myNodeDeviceEventLifecycleCallback, None) - vc.nodeDeviceEventRegisterAny(None, libvirt.VIR_NODE_DEVICE_EVENT_ID_U= PDATE, myNodeDeviceEventUpdateCallback, None) - - vc.secretEventRegisterAny(None, libvirt.VIR_SECRET_EVENT_ID_LIFECYCLE,= mySecretEventLifecycleCallback, None) - vc.secretEventRegisterAny(None, libvirt.VIR_SECRET_EVENT_ID_VALUE_CHAN= GED, mySecretEventValueChanged, None) + domcallbacks =3D [] + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_LIFECYCLE, myDomainEventCallback2, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_REBOOT, myDomainEventRebootCallback, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_RTC_CHANGE, myDomainEventRTCChangeCallback, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_WATCHDOG, myDomainEventWatchdogCallback, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_IO_ERROR, myDomainEventIOErrorCallback, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_GRAPHICS, myDomainEventGraphicsCallback, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_IO_ERROR_REASON, myDomainEventIOErrorReasonCallback, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_CONTROL_ERROR, myDomainEventControlErrorCallback, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_BLOCK_JOB, myDomainEventBlockJobCallback, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_DISK_CHANGE, myDomainEventDiskChangeCallback, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_TRAY_CHANGE, myDomainEventTrayChangeCallback, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_PMWAKEUP, myDomainEventPMWakeupCallback, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_PMSUSPEND, myDomainEventPMSuspendCallback, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_BALLOON_CHANGE, myDomainEventBalloonChangeCallback, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_PMSUSPEND_DISK, myDomainEventPMSuspendDiskCallback, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_DEVICE_REMOVED, myDomainEventDeviceRemovedCallback, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_BLOCK_JOB_2, myDomainEventBlockJob2Callback, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_TUNABLE, myDomainEventTunableCallback, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_AGENT_LIFECYCLE, myDomainEventAgentLifecycleCallback, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_DEVICE_ADDED, myDomainEventDeviceAddedCallback, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_MIGRATION_ITERATION, myDomainEventMigrationIteration, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_JOB_COMPLETED, myDomainEventJobCompletedCallback, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_DEVICE_REMOVAL_FAILED, myDomainEventDeviceRemovalFailedCallback, = None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_METADATA_CHANGE, myDomainEventMetadataChangeCallback, None)) + domcallbacks.append(vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN= _EVENT_ID_BLOCK_THRESHOLD, myDomainEventBlockThresholdCallback, None)) + + netcallbacks =3D [] + netcallbacks.append(vc.networkEventRegisterAny(None, libvirt.VIR_NETWO= RK_EVENT_ID_LIFECYCLE, myNetworkEventLifecycleCallback, None)) + + poolcallbacks =3D [] + poolcallbacks.append(vc.storagePoolEventRegisterAny(None, libvirt.VIR_= STORAGE_POOL_EVENT_ID_LIFECYCLE, myStoragePoolEventLifecycleCallback, None)) + poolcallbacks.append(vc.storagePoolEventRegisterAny(None, libvirt.VIR_= STORAGE_POOL_EVENT_ID_REFRESH, myStoragePoolEventRefreshCallback, None)) + + devcallbacks =3D [] + devcallbacks.append(vc.nodeDeviceEventRegisterAny(None, libvirt.VIR_NO= DE_DEVICE_EVENT_ID_LIFECYCLE, myNodeDeviceEventLifecycleCallback, None)) + devcallbacks.append(vc.nodeDeviceEventRegisterAny(None, libvirt.VIR_NO= DE_DEVICE_EVENT_ID_UPDATE, myNodeDeviceEventUpdateCallback, None)) + + seccallbacks =3D [] + seccallbacks.append(vc.secretEventRegisterAny(None, libvirt.VIR_SECRET= _EVENT_ID_LIFECYCLE, mySecretEventLifecycleCallback, None)) + seccallbacks.append(vc.secretEventRegisterAny(None, libvirt.VIR_SECRET= _EVENT_ID_VALUE_CHANGED, mySecretEventValueChanged, None)) =20 vc.setKeepAlive(5, 3) =20 @@ -750,6 +755,24 @@ def main(): count =3D count + 1 time.sleep(1) =20 + vc.domainEventDeregister(myDomainEventCallback1) + + for id in seccallbacks: + vc.secretEventDeregisterAny(id) + for id in devcallbacks: + vc.nodeDeviceEventDeregisterAny(id) + for id in poolcallbacks: + vc.storagePoolEventDeregisterAny(id) + for id in netcallbacks: + vc.networkEventDeregisterAny(id) + for id in domcallbacks: + vc.domainEventDeregisterAny(id) + + vc.unregisterCloseCallback() + vc.close() + + # Allow delayed event loop cleanup to run, just for sake of testing + time.sleep(2) =20 if __name__ =3D=3D "__main__": main() --=20 2.9.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list