From nobody Mon May 6 22:50:11 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.39 as permitted sender) client-ip=209.132.183.39; envelope-from=libvir-list-bounces@redhat.com; helo=mx6-phx2.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.39 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx6-phx2.redhat.com (mx6-phx2.redhat.com [209.132.183.39]) by mx.zohomail.com with SMTPS id 1486105575367217.9482320506794; Thu, 2 Feb 2017 23:06:15 -0800 (PST) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by mx6-phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v13726vJ051036; Fri, 3 Feb 2017 02:02:07 -0500 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v13725fI018663 for ; Fri, 3 Feb 2017 02:02:05 -0500 Received: from mx1.redhat.com (ext-mx09.extmail.prod.ext.phx2.redhat.com [10.5.110.38]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v13725JW002257 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Fri, 3 Feb 2017 02:02:05 -0500 Received: from relay.sw.ru (mailhub.sw.ru [195.214.232.25]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 66CD04E4D8 for ; Fri, 3 Feb 2017 07:02:03 +0000 (UTC) Received: from dim-vz7.qa.sw.ru (msk-vpn.virtuozzo.com [195.214.232.6]) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id v1371xBm018641 for ; Fri, 3 Feb 2017 10:02:00 +0300 (MSK) From: Nikolay Shirokovskiy To: libvir-list@redhat.com Date: Fri, 3 Feb 2017 10:01:55 +0300 Message-Id: <1486105315-717299-1-git-send-email-nshirokovskiy@virtuozzo.com> X-Greylist: Delayed for 95:47:17 by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Fri, 03 Feb 2017 07:02:04 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Fri, 03 Feb 2017 07:02:04 +0000 (UTC) for IP:'195.214.232.25' DOMAIN:'mailhub.sw.ru' HELO:'relay.sw.ru' FROM:'nshirokovskiy@virtuozzo.com' RCPT:'' X-RedHat-Spam-Score: 0.699 (BAYES_50, DCC_REPUT_13_19, SPF_PASS) 195.214.232.25 mailhub.sw.ru 195.214.232.25 mailhub.sw.ru X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Scanned-By: MIMEDefang 2.78 on 10.5.110.38 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH RESEND] vz: make more accurate closing connection to sdk 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-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Current code for example can call unsubscribe if connection succeeds but subscribing fails. This will probabaly lead only to spurious error messages without any actual inconsistencies but nevertheless. --- src/vz/vz_driver.c | 9 ++------ src/vz/vz_sdk.c | 65 +++++++++++++++++++++++++++-----------------------= ---- src/vz/vz_sdk.h | 2 -- 3 files changed, 34 insertions(+), 42 deletions(-) diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c index 6aade90..4408591 100644 --- a/src/vz/vz_driver.c +++ b/src/vz/vz_driver.c @@ -163,11 +163,7 @@ static void vzDriverDispose(void * obj) { vzDriverPtr driver =3D obj; =20 - if (driver->server) { - prlsdkUnsubscribeFromPCSEvents(driver); - prlsdkDisconnect(driver); - } - + prlsdkDisconnect(driver); virObjectUnref(driver->domains); virObjectUnref(driver->caps); virObjectUnref(driver->xmlopt); @@ -348,8 +344,7 @@ vzDriverObjNew(void) !(driver->domains =3D virDomainObjListNew()) || !(driver->domainEventState =3D virObjectEventStateNew()) || (vzInitVersion(driver) < 0) || - (prlsdkConnect(driver) < 0) || - (prlsdkSubscribeToPCSEvents(driver) < 0)) { + (prlsdkConnect(driver) < 0)) { virObjectUnref(driver); return NULL; } diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c index 3f46de7..4c6c3a2 100644 --- a/src/vz/vz_sdk.c +++ b/src/vz/vz_sdk.c @@ -43,6 +43,8 @@ static int prlsdkUUIDParse(const char *uuidstr, unsigned char *uuid); static void prlsdkConvertError(PRL_RESULT pret); +static PRL_RESULT +prlsdkEventsHandler(PRL_HANDLE prlEvent, PRL_VOID_PTR opaque); =20 VIR_LOG_INIT("parallels.sdk"); =20 @@ -363,41 +365,62 @@ prlsdkConnect(vzDriverPtr driver) job =3D PrlSrv_LoginLocalEx(driver->server, NULL, 0, PSL_HIGH_SECURITY, PACF_NON_INTERACTIVE_MODE= ); if (PRL_FAILED(getJobResult(job, &result))) - goto cleanup; + goto destroy; =20 pret =3D PrlResult_GetParam(result, &response); - prlsdkCheckRetGoto(pret, cleanup); + prlsdkCheckRetGoto(pret, logoff); =20 pret =3D prlsdkGetStringParamBuf(PrlLoginResponse_GetSessionUuid, response, session_uuid, sizeof(session_= uuid)); - prlsdkCheckRetGoto(pret, cleanup); + prlsdkCheckRetGoto(pret, logoff); =20 if (prlsdkUUIDParse(session_uuid, driver->session_uuid) < 0) - goto cleanup; + goto logoff; + + pret =3D PrlSrv_RegEventHandler(driver->server, + prlsdkEventsHandler, + driver); + prlsdkCheckRetGoto(pret, logoff); =20 ret =3D 0; =20 cleanup: - if (ret < 0) { - PrlHandle_Free(driver->server); - driver->server =3D PRL_INVALID_HANDLE; - } - PrlHandle_Free(result); PrlHandle_Free(response); =20 return ret; + + logoff: + job =3D PrlSrv_Logoff(driver->server); + waitJob(job); + + destroy: + PrlHandle_Free(driver->server); + driver->server =3D PRL_INVALID_HANDLE; + + goto cleanup; } =20 void prlsdkDisconnect(vzDriverPtr driver) { PRL_HANDLE job; + PRL_RESULT ret; + + if (driver->server =3D=3D PRL_INVALID_HANDLE) + return; + + ret =3D PrlSrv_UnregEventHandler(driver->server, + prlsdkEventsHandler, + driver); + if (PRL_FAILED(ret)) + logPrlError(ret); =20 job =3D PrlSrv_Logoff(driver->server); waitJob(job); =20 PrlHandle_Free(driver->server); + driver->server =3D PRL_INVALID_HANDLE; } =20 static int @@ -2334,30 +2357,6 @@ prlsdkEventsHandler(PRL_HANDLE prlEvent, PRL_VOID_PT= R opaque) return PRL_ERR_SUCCESS; } =20 -int prlsdkSubscribeToPCSEvents(vzDriverPtr driver) -{ - PRL_RESULT pret =3D PRL_ERR_UNINITIALIZED; - - pret =3D PrlSrv_RegEventHandler(driver->server, - prlsdkEventsHandler, - driver); - prlsdkCheckRetGoto(pret, error); - return 0; - - error: - return -1; -} - -void prlsdkUnsubscribeFromPCSEvents(vzDriverPtr driver) -{ - PRL_RESULT ret =3D PRL_ERR_UNINITIALIZED; - ret =3D PrlSrv_UnregEventHandler(driver->server, - prlsdkEventsHandler, - driver); - if (PRL_FAILED(ret)) - logPrlError(ret); -} - int prlsdkStart(virDomainObjPtr dom) { PRL_HANDLE job =3D PRL_INVALID_HANDLE; diff --git a/src/vz/vz_sdk.h b/src/vz/vz_sdk.h index 7e34cbf..f8da2ad 100644 --- a/src/vz/vz_sdk.h +++ b/src/vz/vz_sdk.h @@ -35,8 +35,6 @@ prlsdkAddDomainByUUID(vzDriverPtr driver, const unsigned = char *uuid); virDomainObjPtr prlsdkAddDomainByName(vzDriverPtr driver, const char *name); int prlsdkUpdateDomain(vzDriverPtr driver, virDomainObjPtr dom); -int prlsdkSubscribeToPCSEvents(vzDriverPtr driver); -void prlsdkUnsubscribeFromPCSEvents(vzDriverPtr driver); =20 int prlsdkStart(virDomainObjPtr dom); int prlsdkKill(virDomainObjPtr dom); --=20 1.8.3.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list