Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1keV6X-0005Ie-1j for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Nov 2020 03:22:57 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1keV6V-0007aO-RK for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Nov 2020 03:22:55 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1keV6V-0007Zm-Ba for pgsql-hackers@lists.postgresql.org; Mon, 16 Nov 2020 03:22:55 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1keV6N-0005lL-Rz for pgsql-hackers@lists.postgresql.org; Mon, 16 Nov 2020 03:22:54 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTP id 0F41D62381; Mon, 16 Nov 2020 12:22:44 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.3 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_ba18af5e129defb83c5cad057cc816dd" Date: Mon, 16 Nov 2020 12:22:44 +0900 From: Seino Yuki To: Fujii Masao Cc: pgsql-hackers@lists.postgresql.org Subject: Re: [PATCH] Add features to pg_stat_statements In-Reply-To: <2e9d596e-5b33-3368-682b-87431b65ce8f@oss.nttdata.com> References: <0d9f1107772cf5c3f954e985464c7298@oss.nttdata.com> <160250511275.1171.7692218521107860164.pgcf@coridan.postgresql.org> <369018a4-746c-6914-4983-1b79aa9fdd37@oss.nttdata.com> <4ab1bf5ab895d44ff0a3b3d06d1f85b2@oss.nttdata.com> <5d13be75-ed32-c500-f029-5838ba77d6c9@oss.nttdata.com> <2f749a3bd1b49f1d282abf59619fe1f5@oss.nttdata.com> <050fd52dcddac965ad24a636c25a5611@oss.nttdata.com> <2e9d596e-5b33-3368-682b-87431b65ce8f@oss.nttdata.com> Message-ID: X-Sender: seinoyu@oss.nttdata.com User-Agent: Roundcube Webmail/1.1.9 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_ba18af5e129defb83c5cad057cc816dd Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed > Thanks for updating the patch! > > + pgss_info->dealloc = 0; > + SpinLockInit(&pgss_info->mutex); > + Assert(pgss_info->dealloc == 0); > > Why is this assertion check necessary? It seems not necessary. > > + { > + Assert(found == found_info); > > Having pgssSharedState and pgssInfoCounters separately might make > the code a bit more complicated like the above? If this is true, what > about > including pgssInfoCounters in pgssSharedState? > > PGSS_FILE_HEADER needs to be changed since the patch changes > the format of pgss file? > > + /* Read pgss_info */ > + if (feof(file) == 0) > + if (fread(pgss_info, sizeof(pgssInfoCounters), 1, file) != 1) > + goto read_error; > > Why does feof(file) need to be called here? > > +pgss_info_update(void) > +{ > + { > > Why is the second "{" necessary? It seems redundant. > > +pgss_info_reset(void) > +{ > + { > > Same as above. > > +pg_stat_statements_info(PG_FUNCTION_ARGS) > +{ > + int64 d_count = 0; > + { > > Same as above. > > + SpinLockAcquire(&c->mutex); > + d_count = Int64GetDatum(c->dealloc); > + SpinLockRelease(&c->mutex); > > Why does Int64GetDatum() need to be called here? It seems not > necessary. > > + > + > + pg_stat_statements_info() returns bigint > + > + pg_stat_statements_info > + > + > > Isn't it better not to expose pg_stat_statements_info() function in the > document because pg_stat_statements_info view is enough and there > seems no use case for the function? > > Regards, Thanks for the comment. I'll post a fixed patch. Due to similar fixed, we have also merged the patches discussed in the following thread. https://commitfest.postgresql.org/30/2738/ > Why is this assertion check necessary? It seems not necessary. As indicated, it is unnecessary and will be removed. > Having pgssSharedState and pgssInfoCounters separately might make > the code a bit more complicated like the above? If this is true, what > about > including pgssInfoCounters in pgssSharedState? Fix pgssSharedState to include pgssInfoCounters . The related parts were also corrected accordingly. > PGSS_FILE_HEADER needs to be changed since the patch changes > the format of pgss file? The value of PGSS_FILE_HEADER has been updated. > Why does feof(file) need to be called here? As indicated, it is unnecessary and will be removed. > Why is the second "{" necessary? It seems redundant. As indicated, it is unnecessary and will be removed. But I left the {} in pg_stat_statements_info() to make the shared memory edit part explicit. > Why does Int64GetDatum() need to be called here? It seems not > necessary. As indicated, it is unnecessary and will be removed. > Isn't it better not to expose pg_stat_statements_info() function in the > document because pg_stat_statements_info view is enough and there > seems no use case for the function? As indicated, it is unnecessary and will be removed. Regards. --=_ba18af5e129defb83c5cad057cc816dd Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=pg_stat_statements_info_v2.patch Content-Disposition: attachment; filename=pg_stat_statements_info_v2.patch; size=11586 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL01ha2VmaWxlIGIvY29udHJp Yi9wZ19zdGF0X3N0YXRlbWVudHMvTWFrZWZpbGUKaW5kZXggMDgxZjk5N2Q3MC4uM2VjNjI3Yjk1 NiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvTWFrZWZpbGUKKysrIGIv Y29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvTWFrZWZpbGUKQEAgLTYsNyArNiw3IEBAIE9CSlMg PSBcCiAJcGdfc3RhdF9zdGF0ZW1lbnRzLm8KIAogRVhURU5TSU9OID0gcGdfc3RhdF9zdGF0ZW1l bnRzCi1EQVRBID0gcGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjQuc3FsIFwKK0RBVEEgPSBwZ19zdGF0 X3N0YXRlbWVudHMtLTEuNC5zcWwgcGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjgtLTEuOS5zcWwgXAog CXBnX3N0YXRfc3RhdGVtZW50cy0tMS43LS0xLjguc3FsIHBnX3N0YXRfc3RhdGVtZW50cy0tMS42 LS0xLjcuc3FsIFwKIAlwZ19zdGF0X3N0YXRlbWVudHMtLTEuNS0tMS42LnNxbCBwZ19zdGF0X3N0 YXRlbWVudHMtLTEuNC0tMS41LnNxbCBcCiAJcGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjMtLTEuNC5z cWwgcGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjItLTEuMy5zcWwgXApkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19zdGF0X3N0YXRlbWVudHMvZXhwZWN0ZWQvcGdfc3RhdF9zdGF0ZW1lbnRzLm91dCBiL2Nv bnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL2V4cGVjdGVkL3BnX3N0YXRfc3RhdGVtZW50cy5vdXQK aW5kZXggZTBlZGIxMzRmMy4uYTFlYWVkY2E4ZSAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19zdGF0 X3N0YXRlbWVudHMvZXhwZWN0ZWQvcGdfc3RhdF9zdGF0ZW1lbnRzLm91dAorKysgYi9jb250cmli L3BnX3N0YXRfc3RhdGVtZW50cy9leHBlY3RlZC9wZ19zdGF0X3N0YXRlbWVudHMub3V0CkBAIC04 NTksNCArODU5LDE5IEBAIFNFTEVDVCBxdWVyeSwgcGxhbnMsIGNhbGxzLCByb3dzIEZST00gcGdf c3RhdF9zdGF0ZW1lbnRzIE9SREVSIEJZIHF1ZXJ5IENPTExBVEUKICBTRUxFQ1QgcXVlcnksIHBs YW5zLCBjYWxscywgcm93cyBGUk9NIHBnX3N0YXRfc3RhdGVtZW50cyBPUkRFUiBCWSBxdWVyeSBD T0xMQVRFICJDIiB8ICAgICAxIHwgICAgIDAgfCAgICAwCiAoNiByb3dzKQogCistLQorLS0gQ2hl Y2tpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgcGdfc3RhdF9zdGF0ZW1lbnRzX2luZm8gdmlldwor LS0KK1NFTEVDVCBwZ19zdGF0X3N0YXRlbWVudHNfcmVzZXQoMCwwLDApOworIHBnX3N0YXRfc3Rh dGVtZW50c19yZXNldCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisK K1NFTEVDVCBkZWFsbG9jIEZST00gcGdfc3RhdF9zdGF0ZW1lbnRzX2luZm87CisgZGVhbGxvYyAK Ky0tLS0tLS0tLQorICAgICAgIDAKKygxIHJvdykKKwogRFJPUCBFWFRFTlNJT04gcGdfc3RhdF9z dGF0ZW1lbnRzOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3Rh dF9zdGF0ZW1lbnRzLS0xLjgtLTEuOS5zcWwgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9w Z19zdGF0X3N0YXRlbWVudHMtLTEuOC0tMS45LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi40ZWRiYzAzZGMxCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19z dGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjgtLTEuOS5zcWwKQEAgLTAsMCAr MSwxOCBAQAorLyogY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRz LS0xLjgtLTEuOS5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4g cHNxbCwgcmF0aGVyIHRoYW4gdmlhIEFMVEVSIEVYVEVOU0lPTgorXGVjaG8gVXNlICJBTFRFUiBF WFRFTlNJT04gcGdfc3RhdF9zdGF0ZW1lbnRzIFVQREFURSBUTyAnMS45JyIgdG8gbG9hZCB0aGlz IGZpbGUuIFxxdWl0CisKKy0tLSBEZWZpbmUgcGdfc3RhdF9zdGF0ZW1lbnRzX2luZm8KK0NSRUFU RSBGVU5DVElPTiBwZ19zdGF0X3N0YXRlbWVudHNfaW5mbyAoCisJT1VUIGRlYWxsb2MgYmlnaW50 LAorCU9VVCByZXNldF9leGVjX3RpbWUgVElNRVNUQU1QIFdJVEggVElNRSBaT05FCispCitSRVRV Uk5TIHJlY29yZAorQVMgJ01PRFVMRV9QQVRITkFNRScKK0xBTkdVQUdFIEMgU1RSSUNUIFZPTEFU SUxFIFBBUkFMTEVMIFNBRkU7CisKK0NSRUFURSBWSUVXIHBnX3N0YXRfc3RhdGVtZW50c19pbmZv IEFTCisJU0VMRUNUICogRlJPTSBwZ19zdGF0X3N0YXRlbWVudHNfaW5mbygpOworCitHUkFOVCBT RUxFQ1QgT04gcGdfc3RhdF9zdGF0ZW1lbnRzX2luZm8gVE8gUFVCTElDOwpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMgYi9jb250cmli L3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYwppbmRleCAxZWFjOWVkYWVl Li4wODU3YzFlMmE0IDEwMDY0NAotLS0gYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19z dGF0X3N0YXRlbWVudHMuYworKysgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0 X3N0YXRlbWVudHMuYwpAQCAtODEsNiArODEsNyBAQAogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgog I2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIK KyNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKIAogUEdfTU9EVUxFX01BR0lDOwogCkBAIC05 OCw3ICs5OSw3IEBAIFBHX01PRFVMRV9NQUdJQzsKICNkZWZpbmUgUEdTU19URVhUX0ZJTEUJUEdf U1RBVF9UTVBfRElSICIvcGdzc19xdWVyeV90ZXh0cy5zdGF0IgogCiAvKiBNYWdpYyBudW1iZXIg aWRlbnRpZnlpbmcgdGhlIHN0YXRzIGZpbGUgZm9ybWF0ICovCi1zdGF0aWMgY29uc3QgdWludDMy IFBHU1NfRklMRV9IRUFERVIgPSAweDIwMTcxMDA0Oworc3RhdGljIGNvbnN0IHVpbnQzMiBQR1NT X0ZJTEVfSEVBREVSID0gMHgyMDIwMTExNjsKIAogLyogUG9zdGdyZVNRTCBtYWpvciB2ZXJzaW9u IG51bWJlciwgY2hhbmdlcyBpbiB3aGljaCBpbnZhbGlkYXRlIGFsbCBlbnRyaWVzICovCiBzdGF0 aWMgY29uc3QgdWludDMyIFBHU1NfUEdfTUFKT1JfVkVSU0lPTiA9IFBHX1ZFUlNJT05fTlVNIC8g MTAwOwpAQCAtMTkzLDYgKzE5NCwxNyBAQCB0eXBlZGVmIHN0cnVjdCBDb3VudGVycwogCXVpbnQ2 NAkJd2FsX2J5dGVzOwkJLyogdG90YWwgYW1vdW50IG9mIFdBTCBieXRlcyBnZW5lcmF0ZWQgKi8K IH0gQ291bnRlcnM7CiAKKy8qCisgKiBDb3VudGVyIGZvciBwZ19zdGF0X3N0YXRlbWVudHNfaW5m bworICovCit0eXBlZGVmIHN0cnVjdCBwZ3NzSW5mb0NvdW50ZXJzCit7CisJaW50NjQJCWRlYWxs b2M7CQkJCQkvKiAjIG9mIGRlYWxsb2NhdGlvbiAqLworCVRpbWVzdGFtcFR6IHJlc2V0X2V4ZWNf dGltZTsgICAgCQkJCS8qIHRpbWVzdGFtcCB3aXRoIGFsbCBzdGF0cyByZXNldCAqLworCWJvb2wJ CXJlc2V0X2V4ZWNfdGltZV9pc251bGw7CQkvKiBpZiB0cnVlIGxhc3RfZGVhbGxvYyBpcyBudWxs ICovCisJc2xvY2tfdAkJbXV0ZXg7CQkJCQkJLyogcHJvdGVjdHMgdGhlIGNvdW50ZXJzIG9ubHkg Ki8KK30gcGdzc0luZm9Db3VudGVyczsKKwogLyoKICAqIFN0YXRpc3RpY3MgcGVyIHN0YXRlbWVu dAogICoKQEAgLTIyMiw2ICsyMzQsNyBAQCB0eXBlZGVmIHN0cnVjdCBwZ3NzU2hhcmVkU3RhdGUK IAlTaXplCQlleHRlbnQ7CQkJLyogY3VycmVudCBleHRlbnQgb2YgcXVlcnkgZmlsZSAqLwogCWlu dAkJCW5fd3JpdGVyczsJCS8qIG51bWJlciBvZiBhY3RpdmUgd3JpdGVycyB0byBxdWVyeSBmaWxl ICovCiAJaW50CQkJZ2NfY291bnQ7CQkvKiBxdWVyeSBmaWxlIGdhcmJhZ2UgY29sbGVjdGlvbiBj eWNsZSBjb3VudCAqLworCXBnc3NJbmZvQ291bnRlcnMJcGdzc19pbmZvOwkvKiBDb3VudGVyIGZv ciBwZ19zdGF0X3N0YXRlbWVudHNfaW5mbyAqLwogfSBwZ3NzU2hhcmVkU3RhdGU7CiAKIC8qCkBA IC0zMjcsNiArMzQwLDcgQEAgUEdfRlVOQ1RJT05fSU5GT19WMShwZ19zdGF0X3N0YXRlbWVudHNf MV8yKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdfc3RhdF9zdGF0ZW1lbnRzXzFfMyk7CiBQR19G VU5DVElPTl9JTkZPX1YxKHBnX3N0YXRfc3RhdGVtZW50c18xXzgpOwogUEdfRlVOQ1RJT05fSU5G T19WMShwZ19zdGF0X3N0YXRlbWVudHMpOworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19zdGF0X3N0 YXRlbWVudHNfaW5mbyk7CiAKIHN0YXRpYyB2b2lkIHBnc3Nfc2htZW1fc3RhcnR1cCh2b2lkKTsK IHN0YXRpYyB2b2lkIHBnc3Nfc2htZW1fc2h1dGRvd24oaW50IGNvZGUsIERhdHVtIGFyZyk7CkBA IC01NTQsNiArNTY4LDkgQEAgcGdzc19zaG1lbV9zdGFydHVwKHZvaWQpCiAJCXBnc3MtPmV4dGVu dCA9IDA7CiAJCXBnc3MtPm5fd3JpdGVycyA9IDA7CiAJCXBnc3MtPmdjX2NvdW50ID0gMDsKKwkJ cGdzcy0+cGdzc19pbmZvLmRlYWxsb2MgPSAwOworCQlwZ3NzLT5wZ3NzX2luZm8ucmVzZXRfZXhl Y190aW1lID0gMDsKKwkJcGdzcy0+cGdzc19pbmZvLnJlc2V0X2V4ZWNfdGltZV9pc251bGwgPSB0 cnVlOwogCX0KIAogCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKQEAgLTY3Myw2ICs2 OTAsMTAgQEAgcGdzc19zaG1lbV9zdGFydHVwKHZvaWQpCiAJCWVudHJ5LT5jb3VudGVycyA9IHRl bXAuY291bnRlcnM7CiAJfQogCisJLyogUmVhZCBwZ3NzX2luZm8gKi8KKwlpZiAoZnJlYWQoJnBn c3MtPnBnc3NfaW5mbywgc2l6ZW9mKHBnc3NJbmZvQ291bnRlcnMpLCAxLCBmaWxlKSAhPSAxKQor CQlnb3RvIHJlYWRfZXJyb3I7CisKIAlwZnJlZShidWZmZXIpOwogCUZyZWVGaWxlKGZpbGUpOwog CUZyZWVGaWxlKHFmaWxlKTsKQEAgLTc5NCw2ICs4MTUsMTAgQEAgcGdzc19zaG1lbV9zaHV0ZG93 bihpbnQgY29kZSwgRGF0dW0gYXJnKQogCQl9CiAJfQogCisJLyogRHVtcCBwZ3NzX2luZm8gKi8K KwlpZiAoZndyaXRlKCZwZ3NzLT5wZ3NzX2luZm8sIHNpemVvZihwZ3NzSW5mb0NvdW50ZXJzKSwg MSwgZmlsZSkgIT0gMSkKKwkJZ290byBlcnJvcjsKKwogCWZyZWUocWJ1ZmZlcik7CiAJcWJ1ZmZl ciA9IE5VTEw7CiAKQEAgLTE0OTAsNiArMTUxNSw3IEBAIHBnX3N0YXRfc3RhdGVtZW50c19yZXNl dChQR19GVU5DVElPTl9BUkdTKQogI2RlZmluZSBQR19TVEFUX1NUQVRFTUVOVFNfQ09MU19WMV8z CTIzCiAjZGVmaW5lIFBHX1NUQVRfU1RBVEVNRU5UU19DT0xTX1YxXzgJMzIKICNkZWZpbmUgUEdf U1RBVF9TVEFURU1FTlRTX0NPTFMJCQkzMgkvKiBtYXhpbXVtIG9mIGFib3ZlICovCisjZGVmaW5l IFBHX1NUQVRfU1RBVEVNRU5UU19JTkZPX0NPTFMJMgogCiAvKgogICogUmV0cmlldmUgc3RhdGVt ZW50IHN0YXRpc3RpY3MuCkBAIC0xODYyLDYgKzE4ODgsNDIgQEAgcGdfc3RhdF9zdGF0ZW1lbnRz X2ludGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCXR1cGxlc3RvcmVfZG9uZXN0b3Jp bmcodHVwc3RvcmUpOwogfQogCitEYXR1bQorcGdfc3RhdF9zdGF0ZW1lbnRzX2luZm8oUEdfRlVO Q1RJT05fQVJHUykKK3sKKwlUdXBsZURlc2MJdHVwZGVzYzsKKwlIZWFwVHVwbGUJcmVzdWx0X3R1 cGxlOworCURhdHVtCQlyZXN1bHQ7CisJRGF0dW0gCQl2YWx1ZXNbUEdfU1RBVF9TVEFURU1FTlRT X0lORk9fQ09MU107CisJYm9vbCAJCW51bGxzW1BHX1NUQVRfU1RBVEVNRU5UU19JTkZPX0NPTFNd OworCWJvb2wJCXRzX2lzbnVsbDsKKwlpbnQgCQlpID0gMDsKKworCUFzc2VydChQR19TVEFUX1NU QVRFTUVOVFNfSU5GT19DT0xTID09IDIpOworCisJaWYgKGdldF9jYWxsX3Jlc3VsdF90eXBlKGZj aW5mbywgTlVMTCwgJnR1cGRlc2MpICE9IFRZUEVGVU5DX0NPTVBPU0lURSkKKwkJZWxvZyhFUlJP UiwgInJldHVybiB0eXBlIG11c3QgYmUgYSByb3cgdHlwZSIpOworCisJdHVwZGVzYyA9IEJsZXNz VHVwbGVEZXNjKHR1cGRlc2MpOworCisJbWVtc2V0KG51bGxzLCAwLCBzaXplb2YobnVsbHMpKTsK Kwl7CisJCXZvbGF0aWxlIHBnc3NTaGFyZWRTdGF0ZSAqcyA9ICh2b2xhdGlsZSBwZ3NzU2hhcmVk U3RhdGUgKikgcGdzczsKKwkJU3BpbkxvY2tBY3F1aXJlKCZzLT5tdXRleCk7CisJCXZhbHVlc1tp KytdID0gcGdzcy0+cGdzc19pbmZvLmRlYWxsb2M7CisJCXRzX2lzbnVsbCA9IHBnc3MtPnBnc3Nf aW5mby5yZXNldF9leGVjX3RpbWVfaXNudWxsOworCQlpZiAoIXRzX2lzbnVsbCkKKwkJCXZhbHVl c1tpKytdID0gcGdzcy0+cGdzc19pbmZvLnJlc2V0X2V4ZWNfdGltZTsKKwkJZWxzZQorCQkJbnVs bHNbaSsrXSA9IHRydWU7CisJCVNwaW5Mb2NrUmVsZWFzZSgmcy0+bXV0ZXgpOworCX0KKwlyZXN1 bHRfdHVwbGUgPSBoZWFwX2Zvcm1fdHVwbGUodHVwZGVzYywgdmFsdWVzLCBudWxscyk7CisJcmVz dWx0ID0gSGVhcFR1cGxlR2V0RGF0dW0ocmVzdWx0X3R1cGxlKTsKKworCXJldHVybiByZXN1bHQ7 Cit9CisKIC8qCiAgKiBFc3RpbWF0ZSBzaGFyZWQgbWVtb3J5IHNwYWNlIG5lZWRlZC4KICAqLwpA QCAtMTkwMiw3ICsxOTY0LDE4IEBAIGVudHJ5X2FsbG9jKHBnc3NIYXNoS2V5ICprZXksIFNpemUg cXVlcnlfb2Zmc2V0LCBpbnQgcXVlcnlfbGVuLCBpbnQgZW5jb2RpbmcsCiAKIAkvKiBNYWtlIHNw YWNlIGlmIG5lZWRlZCAqLwogCXdoaWxlIChoYXNoX2dldF9udW1fZW50cmllcyhwZ3NzX2hhc2gp ID49IHBnc3NfbWF4KQorCXsKIAkJZW50cnlfZGVhbGxvYygpOworCQkvKiBVcGRhdGUgcGdzc19p bmZvICovCisJCXsKKwkJCXZvbGF0aWxlIHBnc3NTaGFyZWRTdGF0ZSAqcyA9ICh2b2xhdGlsZSBw Z3NzU2hhcmVkU3RhdGUgKikgcGdzczsKKwkJCVNwaW5Mb2NrQWNxdWlyZSgmcy0+bXV0ZXgpOwor CQkJcy0+cGdzc19pbmZvLmRlYWxsb2MgKz0gMTsJLyogaW5jcmVtZW50IGRlYWxsb2MgY291bnQg Ki8KKwkJCVNwaW5Mb2NrUmVsZWFzZSgmcy0+bXV0ZXgpOworCQl9CisJCWVyZXBvcnQoTE9HLAor CQkJKGVycm1zZygiVGhlIGluZm9ybWF0aW9uIGluIHBnX3N0YXRfc3RhdGVtZW50cyBoYXMgYmVl biBkZWFsbG9jYXRlZC4iKSkpOworCX0KIAogCS8qIEZpbmQgb3IgY3JlYXRlIGFuIGVudHJ5IHdp dGggZGVzaXJlZCBoYXNoIGNvZGUgKi8KIAllbnRyeSA9IChwZ3NzRW50cnkgKikgaGFzaF9zZWFy Y2gocGdzc19oYXNoLCBrZXksIEhBU0hfRU5URVIsICZmb3VuZCk7CkBAIC0yNDU4LDYgKzI1MzEs OSBAQCBlbnRyeV9yZXNldChPaWQgdXNlcmlkLCBPaWQgZGJpZCwgdWludDY0IHF1ZXJ5aWQpCiAJ bG9uZwkJbnVtX2VudHJpZXM7CiAJbG9uZwkJbnVtX3JlbW92ZSA9IDA7CiAJcGdzc0hhc2hLZXkg a2V5OworCVRpbWVzdGFtcFR6IHJlc2V0X3RzOworCQorCXJlc2V0X3RzID0gR2V0Q3VycmVudFRp bWVzdGFtcCgpOwogCiAJaWYgKCFwZ3NzIHx8ICFwZ3NzX2hhc2gpCiAJCWVyZXBvcnQoRVJST1Is CkBAIC0yNTAzLDYgKzI1NzksMTYgQEAgZW50cnlfcmVzZXQoT2lkIHVzZXJpZCwgT2lkIGRiaWQs IHVpbnQ2NCBxdWVyeWlkKQogCQkJaGFzaF9zZWFyY2gocGdzc19oYXNoLCAmZW50cnktPmtleSwg SEFTSF9SRU1PVkUsIE5VTEwpOwogCQkJbnVtX3JlbW92ZSsrOwogCQl9CisKKwkJLyogUmVzZXQg YW5kIFVwZGF0ZSBwZ3NzX2luZm8gKi8KKwkJeworCQkJdm9sYXRpbGUgcGdzc1NoYXJlZFN0YXRl ICpzID0gKHZvbGF0aWxlIHBnc3NTaGFyZWRTdGF0ZSAqKSBwZ3NzOworCQkJU3BpbkxvY2tBY3F1 aXJlKCZzLT5tdXRleCk7CisJCQlzLT5wZ3NzX2luZm8uZGVhbGxvYyA9IDA7CQkJCQkvKiByZXNl dCBkZWFsbG9jIGNvdW50ICovCisJCQlzLT5wZ3NzX2luZm8ucmVzZXRfZXhlY190aW1lID0gcmVz ZXRfdHM7CS8qIHJlc2V0IGV4ZWN1dGlvbiB0aW1lICovCisJCQlzLT5wZ3NzX2luZm8ucmVzZXRf ZXhlY190aW1lX2lzbnVsbCA9IGZhbHNlOworCQkJU3BpbkxvY2tSZWxlYXNlKCZzLT5tdXRleCk7 CisJCX0KIAl9CiAKIAkvKiBBbGwgZW50cmllcyBhcmUgcmVtb3ZlZD8gKi8KZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jb250cm9sIGIv Y29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmNvbnRyb2wKaW5k ZXggNjViMThiMTFkMi4uMmYxY2U2ZWQ1MCAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19zdGF0X3N0 YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmNvbnRyb2wKKysrIGIvY29udHJpYi9wZ19zdGF0 X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmNvbnRyb2wKQEAgLTEsNSArMSw1IEBACiAj IHBnX3N0YXRfc3RhdGVtZW50cyBleHRlbnNpb24KIGNvbW1lbnQgPSAndHJhY2sgcGxhbm5pbmcg YW5kIGV4ZWN1dGlvbiBzdGF0aXN0aWNzIG9mIGFsbCBTUUwgc3RhdGVtZW50cyBleGVjdXRlZCcK LWRlZmF1bHRfdmVyc2lvbiA9ICcxLjgnCitkZWZhdWx0X3ZlcnNpb24gPSAnMS45JwogbW9kdWxl X3BhdGhuYW1lID0gJyRsaWJkaXIvcGdfc3RhdF9zdGF0ZW1lbnRzJwogcmVsb2NhdGFibGUgPSB0 cnVlCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9zcWwvcGdfc3RhdF9z dGF0ZW1lbnRzLnNxbCBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3NxbC9wZ19zdGF0X3N0 YXRlbWVudHMuc3FsCmluZGV4IDk5NmEyNGEyOTMuLjQwMTZkMTk1NTMgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3NxbC9wZ19zdGF0X3N0YXRlbWVudHMuc3FsCisrKyBi L2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3NxbC9wZ19zdGF0X3N0YXRlbWVudHMuc3FsCkBA IC0zNTcsNCArMzU3LDEwIEBAIFNFTEVDVCA0MjsKIFNFTEVDVCA0MjsKIFNFTEVDVCBxdWVyeSwg cGxhbnMsIGNhbGxzLCByb3dzIEZST00gcGdfc3RhdF9zdGF0ZW1lbnRzIE9SREVSIEJZIHF1ZXJ5 IENPTExBVEUgIkMiOwogCistLQorLS0gQ2hlY2tpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgcGdf c3RhdF9zdGF0ZW1lbnRzX2luZm8gdmlldworLS0KK1NFTEVDVCBwZ19zdGF0X3N0YXRlbWVudHNf cmVzZXQoMCwwLDApOworU0VMRUNUIGRlYWxsb2MgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHNfaW5m bzsKKwogRFJPUCBFWFRFTlNJT04gcGdfc3RhdF9zdGF0ZW1lbnRzOwpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL3Bnc3RhdHN0YXRlbWVudHMuc2dtbCBiL2RvYy9zcmMvc2dtbC9wZ3N0YXRzdGF0 ZW1lbnRzLnNnbWwKaW5kZXggY2YyZDI1YjdiMi4uMjFmMTUwYWFiYiAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL3Bnc3RhdHN0YXRlbWVudHMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcGdzdGF0 c3RhdGVtZW50cy5zZ21sCkBAIC0yMyw3ICsyMyw4IEBACiAgPHBhcmE+CiAgICBXaGVuIDxmaWxl bmFtZT5wZ19zdGF0X3N0YXRlbWVudHM8L2ZpbGVuYW1lPiBpcyBsb2FkZWQsIGl0IHRyYWNrcwog ICAgc3RhdGlzdGljcyBhY3Jvc3MgYWxsIGRhdGFiYXNlcyBvZiB0aGUgc2VydmVyLiAgVG8gYWNj ZXNzIGFuZCBtYW5pcHVsYXRlCi0gICB0aGVzZSBzdGF0aXN0aWNzLCB0aGUgbW9kdWxlIHByb3Zp ZGVzIGEgdmlldywgPHN0cnVjdG5hbWU+cGdfc3RhdF9zdGF0ZW1lbnRzPC9zdHJ1Y3RuYW1lPiwK KyAgIHRoZXNlIHN0YXRpc3RpY3MsIHRoZSBtb2R1bGUgcHJvdmlkZXMgdmlld3MsIDxzdHJ1Y3Ru YW1lPnBnX3N0YXRfc3RhdGVtZW50czwvc3RydWN0bmFtZT4KKyAgIGFuZCA8c3RydWN0bmFtZT5w Z19zdGF0X3N0YXRlbWVudHNfaW5mbzwvc3RydWN0bmFtZT4sCiAgICBhbmQgdGhlIHV0aWxpdHkg ZnVuY3Rpb25zIDxmdW5jdGlvbj5wZ19zdGF0X3N0YXRlbWVudHNfcmVzZXQ8L2Z1bmN0aW9uPiBh bmQKICAgIDxmdW5jdGlvbj5wZ19zdGF0X3N0YXRlbWVudHM8L2Z1bmN0aW9uPi4gIFRoZXNlIGFy ZSBub3QgYXZhaWxhYmxlIGdsb2JhbGx5IGJ1dAogICAgY2FuIGJlIGVuYWJsZWQgZm9yIGEgc3Bl Y2lmaWMgZGF0YWJhc2Ugd2l0aApAQCAtNDgwLDYgKzQ4MSw1NSBAQAogICA8L3BhcmE+CiAgPC9z ZWN0Mj4KIAorIDxzZWN0Mj4KKyAgPHRpdGxlPlRoZSA8c3RydWN0bmFtZT5wZ19zdGF0X3N0YXRl bWVudHNfaW5mbzwvc3RydWN0bmFtZT4gVmlldzwvdGl0bGU+CisKKyAgPHBhcmE+CisgICBUaGlz IG1vZHVsZSB0cmFja3Mgc3RhdGlzdGljcyBvZiA8ZmlsZW5hbWU+cGdfc3RhdF9zdGF0ZW1lbnRz PC9maWxlbmFtZT4KKyAgIGl0c2VsZiBmb3IgZGV0YWlsZWQgcGVyZm9ybWFuY2UgYW5hbHlzaXMu CisgICBUaGUgc3RhdGlzdGljcyBvZiBwZ19zdGF0X3N0YXRlbWVudHMgaXRzZWxmIGFyZSBtYWRl IGF2YWlsYWJsZSB2aWEgYQorICAgdmlldyBuYW1lZCA8c3RydWN0bmFtZT5wZ19zdGF0X3N0YXRl bWVudHNfaW5mbzwvc3RydWN0bmFtZT4uCisgICBUaGlzIHZpZXcgY29udGFpbnMgb25seSBhIHNp bmdsZSByb3cuCisgICBUaGUgY29sdW1ucyBvZiB0aGUgdmlldyBhcmUgc2hvd24gaW4gPHhyZWYg bGlua2VuZD0icGdzdGF0c3RhdGVtZW50c2luZm8tY29sdW1ucyIvPi4KKyAgPC9wYXJhPgorCisg IDx0YWJsZSBpZD0icGdzdGF0c3RhdGVtZW50c2luZm8tY29sdW1ucyI+CisgICA8dGl0bGU+PHN0 cnVjdG5hbWU+cGdfc3RhdF9zdGF0ZW1lbnRzX2luZm88L3N0cnVjdG5hbWU+IENvbHVtbnM8L3Rp dGxlPgorICAgPHRncm91cCBjb2xzPSIxIj4KKyAgICA8dGhlYWQ+CisgICAgIDxyb3c+CisgICAg ICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2Rl ZmluaXRpb24iPgorICAgICAgIENvbHVtbiBUeXBlCisgICAgICA8L3BhcmE+CisgICAgICA8cGFy YT4KKyAgICAgICBEZXNjcmlwdGlvbgorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93 PgorICAgIDwvdGhlYWQ+CisKKyAgICA8dGJvZHk+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnkg cm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24i PgorICAgICAgIDxzdHJ1Y3RmaWVsZD5kZWFsbG9jPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+YmlnaW50 PC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgVG90YWwgbnVtYmVy IG9mIGRlYWxsb2NhdGlvbnMgb2YgcGdfc3RhdF9zdGF0ZW1lbnRzIHZpZXcgZW50cnkKKyAgICAg IDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKyAgICAgCisgICAgIDxyb3c+CisgICAgICA8 ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmlu aXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD5yZXNldF9leGVjX3RpbWU8L3N0cnVjdGZpZWxk PiA8dHlwZT50aW1lc3RhbXAgd2l0aCB0aW1lIHpvbmU8L3R5cGU+CisgICAgICA8L3BhcmE+Cisg ICAgICA8cGFyYT4KKyAgICAgICBTaG93cyB0aGUgdGltZSBhdCB3aGljaCA8ZnVuY3Rpb24+cGdf c3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KDAsMCwwKTwvZnVuY3Rpb24+IHdhcyBsYXN0IGNhbGxlZC4K KyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKyAgICA8L3Rib2R5PgorICAgPC90 Z3JvdXA+CisgIDwvdGFibGU+CisgPC9zZWN0Mj4KKwogIDxzZWN0Mj4KICAgPHRpdGxlPkZ1bmN0 aW9uczwvdGl0bGU+CiAK --=_ba18af5e129defb83c5cad057cc816dd--