Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wiATd-00031T-14 for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Jul 2026 12:37:09 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wiATb-000FGN-2n for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Jul 2026 12:37:08 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wiATb-000FGE-1U for pgsql-hackers@lists.postgresql.org; Fri, 10 Jul 2026 12:37:08 +0000 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wiATZ-00000000eTE-1bjl for pgsql-hackers@postgresql.org; Fri, 10 Jul 2026 12:37:07 +0000 Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-2cae1a3a744so5614625ad.3 for ; Fri, 10 Jul 2026 05:37:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783687024; cv=none; d=google.com; s=arc-20260327; b=NSUm2XC0CeNvJhPY+7B9LR8B3m9X6cT22PRLfR2CTZRMF2xnxt+Hi6q5pWGVE9QDFn orlzCG7Icr88Hp6pnlsncOqykZR8uUxbrrcIyBTolfln6XlVuH+3VmXv5ZjBwLaYrLgU y+Uz8hBkeqdRjOQsW9dhh/3+tO3Xs0BzuyvvGeo9Cs122gcp0auL/aILp97KN7O7b+mc HH67tC/f74stjTfLIOSUi6Yd2M0IeL8MqiZJHZb+w8lDhM2PncnCwIVXBXjONtDKTKyO pt0wsWy5Z21X3VIZ25wuzL+iJhfEBcsu/7bLLxv8q3KTGmvDwcCfNl1EoqI21d/P/M4q oQtw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=Np18w2xlucBzuPKm1ntQII6g96OYPFcMYdnIg1NHjLI=; fh=ib8WsyqNAAp1fo+h/kcqyUDe31f8T8JaV96s8FYXF3Y=; b=bqEDDmy69N00SbvwI/ramrV4k7fkWhbvsVWSNAwQems/E1cPpHgKPe+dsTCjliTQTF f1di0Ex7kTjpSufMqYr9ORcbyKiOC+xiC6cmtboRQtEIT0Vim2w7iieil7Ho4tHhlMva tmsSmS+DptBtDaMJtOC8IMJ5qrcEB+naXFb6LxgYieA5HS/5Mystf1OHULYUbjUut8hO sdPLHGzbLiIS33BIQU5YHTIeQTQUmnIa+8U6ZJ8HMgjmujbyUcx6oovM/Km5fUGRiWEY 4Duqws2iYnDgHZBbIJs5iyFHVy8aKYr2nAiAjEeBzKCuqiMoJvSSod/QCAuU36vG1ggI MF1Q==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783687024; x=1784291824; darn=postgresql.org; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Np18w2xlucBzuPKm1ntQII6g96OYPFcMYdnIg1NHjLI=; b=oLD6MloZyCw3Z6pO9gRuaaq4gDL4f9WC2m2JWNFQ8DZ3a2e4UWx/L/CTIeBI3nCQgP Th9vSqDnEkUlhzZj1SB+XFoamcDgJgGyMjWJ46ZHf+17F+ycAfPxV4ggcXfqZvcVqsyu ogAJdqcG6UBufBmAH+k2IkG5lhvVpSuWaDnNxF/36nJ0xkT8pQBjH1MPnUKB1iu+M3Qc LhDIUWwb0vJbJRlwhA56mumaK9/n63JdlG9653Escei7Ip1jQ1qLrYmcxyiyEoxVBcsp bNnH0VtixujKuvRCvyreK+E+sCMkdWjGsV5+vtohUZAqizqigjKMseavdR8rOY4x7AIq paeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783687024; x=1784291824; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to:content-type; bh=Np18w2xlucBzuPKm1ntQII6g96OYPFcMYdnIg1NHjLI=; b=D4bgMAy1ZGG8A/BfVMol97UczFqHezNy+jVgQGxDJfDSL2s9uSaJfmbMGHicibGcD+ a26ZME0Jsy2AzRSBIRsSiay05/MLhWecbZ3IwfZiPGZr4xEEEgMcWQ1cAL0CD6xlbkaL +/qZRhGWF2YR+2/WUz/gRU1utMCh4G1hNU7ji1eUawbvobzOHhlwMGjz/+cm437U3X7W ILLj1gWq1+REwBxwhXO9tA8FiFdILR/eDQ+LcRj+Dnj+cbFjkJrU9eCkwts4Swlx3j8H dc130ETUoXNPlw2uBeMmiG9z+ql+Q5YkLPtEEBnxgFle3HlYVfIGlVdGAO4T8NdHOxSX kY1g== X-Forwarded-Encrypted: i=1; AHgh+RoemQeWrs+prwoDotonmypZe33SW2McQtYqkr61L6CwV3dzxTP58D41qRHt7BrTPWMPkByHhCjgq2mgiWhg@postgresql.org X-Gm-Message-State: AOJu0YwyfLXDpqiA+mmG2ZjrUsaCRh0y3EgPiwlGG/KecZ1Kr57mc2EW /h160uNxulOwcSFOIeu1B7l9LnjIr93uSNcChp02ssA+2uNUJ7MVeQIjKfBnH+nT8XFYvmVAP4d YydwvGmEPu9DBFX2Diyy8FCyGYl5+ZFI= X-Gm-Gg: AfdE7cnmoPhfFKCNR7kL07jrxteRZazUO9xGYARZcyZk+IA2LzmuKTOQXgcY9kqJ98A qc0X8+FtwtMtCPyYSvhd+semtM/Om1lmY7dQ7w77UH+Cw0wy6aE3qNaUkEa8xNa7yL/Lh/IQxaU lmWF0CjutZjKz0aXsHloEUCVe9gF3q7ma8PAB3kLcX58mkLYp0DRyj87/uPdtgSMcFtCHwmF44L APot6crFPnB7zUC6Idl1lQu61FiTsKkudYzStqdyaMU6yZS2C2f72QGJUqucbFM7YaFFrkPW17/ 3L9rDUTMGFRn9CYNz3uPbcNSi3e/Swg= X-Received: by 2002:a17:902:e5c5:b0:2cc:9a86:9c42 with SMTP id d9443c01a7336-2ccea47e1b2mr99260825ad.45.1783687023417; Fri, 10 Jul 2026 05:37:03 -0700 (PDT) MIME-Version: 1.0 References: <20260710045217.f0.noahmisch@microsoft.com> In-Reply-To: From: vignesh C Date: Fri, 10 Jul 2026 18:06:50 +0530 X-Gm-Features: AVVi8CfweYkKOGuCiqkVy5K6T3ASLjz4WigASpoBRfzlFRLMKqmnW16lvcW6zOA Message-ID: Subject: Re: sequencesync worker race with REFRESH SEQUENCES To: shveta malik Cc: Noah Misch , amit.kapila16@gmail.com, pgsql-hackers@postgresql.org Content-Type: multipart/mixed; boundary="0000000000006c06b9065640ff50" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000006c06b9065640ff50 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, 10 Jul 2026 at 14:10, shveta malik wrote: > > On Fri, Jul 10, 2026 at 12:30=E2=80=AFPM vignesh C = wrote: > > > > On Fri, 10 Jul 2026 at 10:22, Noah Misch wrote: > > > > > > A Fable 5 review of logical replication of sequences found a way to g= et > > > subscribed sequences into READY state despite the subscriber side hav= ing data > > > older than the last REFRESH SEQUENCES. I'm attaching the test case i= t wrote. > > > I reviewed the test, and I think it identifies a genuine defect. > > > > Thanks for reporting this. The test case reproduces this issue. This > > issue is not limited to lock contention. It can also occur if the > > sequence synchronization worker is simply slow. For example, the > > worker may fetch the sequence value from the publisher, after which > > the publisher sequence advances and ALTER SUBSCRIPTION ... REFRESH > > SEQUENCES is executed. When the worker eventually updates the > > subscriber, it uses the stale value that it fetched earlier, > > overwriting the sequence with an out-of-date value. > > I have the same opinion here. > > > How about raising a warning for the second REFRESH SEQUENCES > > indicating that the sequence is already being synchronized and > > skipping it? The warning could also include a hint to rerun ALTER > > SUBSCRIPTION ... REFRESH SEQUENCES after the current synchronization > > completes. > > I agree. This is the simplest solution here. The attached v1-0001 patch avoids resetting the synchronization state of sequences that are already being synchronized. Instead, it emits a warning informing the user that the sequence is already being synchronized and suggests rerunning ALTER SUBSCRIPTION ... REFRESH SEQUENCES after the current synchronization completes. I'm not sure whether a test is necessary for this change. Nevertheless, the attached v1-0002 patch adds a regression test that uses an injection point to deterministically reproduce the race condition and verifies that the expected warning is emitted when ALTER SUBSCRIPTION ... REFRESH SEQUENCES is invoked while a sequence synchronization is already in progress. Regards, Vignesh --0000000000006c06b9065640ff50 Content-Type: application/octet-stream; name="v1-0001-Skip-refreshing-sequences-that-are-already-being-.patch" Content-Disposition: attachment; filename="v1-0001-Skip-refreshing-sequences-that-are-already-being-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mrex3p4y0 RnJvbSAyZDI3NGM0OGVjZDhiMjYyZGYyNjBiOTFmMTExYmJkYmZkOWY5ZWI3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMTAgSnVsIDIwMjYgMTg6MDI6MDUgKzA1MzAKU3ViamVjdDogW1BBVENIIHYxIDEvMl0g U2tpcCByZWZyZXNoaW5nIHNlcXVlbmNlcyB0aGF0IGFyZSBhbHJlYWR5IGJlaW5nCiBzeW5jaHJv bml6ZWQKCidBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggU0VRVUVOQ0VTJyByZXNldHMg dGhlIHN5bmNocm9uaXphdGlvbgpzdGF0ZSBvZiBlYWNoIHN1YnNjcmliZWQgc2VxdWVuY2UgdG8g J0lOSVQnLCBhbGxvd2luZyB0aGUgc2VxdWVuY2Ugc3luYwp3b3JrZXIgdG8gc3luY2hyb25pemUg aXRzIHZhbHVlIGZyb20gdGhlIHB1Ymxpc2hlci4KCkhvd2V2ZXIsIGlmIGEgc2VxdWVuY2UgaXMg YWxyZWFkeSBpbiB0aGUgJ0lOSVQnIHN0YXRlLCBpdCBpbmRpY2F0ZXMgdGhhdAphIHByZXZpb3Vz ICdSRUZSRVNIIFNFUVVFTkNFUycgaGFzIG5vdCB5ZXQgYmVlbiBwcm9jZXNzZWQgYnkgdGhlIHNl cXVlbmNlCnN5bmMgd29ya2VyLiBSZXNldHRpbmcgaXQgYWdhaW4gY2FuIHJhY2Ugd2l0aCB0aGUg d29ya2VyIGlmIGl0IGhhcwphbHJlYWR5IGZldGNoZWQgdGhlIHB1Ymxpc2hlcidzIHNlcXVlbmNl IHZhbHVlIGJ1dCBoYXMgbm90IHlldCBhcHBsaWVkIGl0CnRvIHRoZSBzdWJzY3JpYmVyLiBJbiB0 aGF0IGNhc2UsIHRoZSB3b3JrZXIgbWF5IGxhdGVyIG92ZXJ3cml0ZSB0aGUKc3Vic2NyaWJlciBz ZXF1ZW5jZSB3aXRoIHRoZSBzdGFsZSB2YWx1ZSBpdCBwcmV2aW91c2x5IGZldGNoZWQgYW5kIG1h cmsKdGhlIHNlcXVlbmNlIGFzICdSRUFEWScsIGNhdXNpbmcgdGhlIHN1YnNlcXVlbnQgcmVmcmVz aCByZXF1ZXN0IHRvIGJlCmxvc3QuCgpBdm9pZCB0aGlzIHJhY2UgYnkgc2tpcHBpbmcgc2VxdWVu Y2VzIHRoYXQgYXJlIGFscmVhZHkgaW4gdGhlICdJTklUJwpzdGF0ZS4gRW1pdCBhIHdhcm5pbmcg aW5mb3JtaW5nIHRoZSB1c2VyIHRoYXQgdGhlIHNlcXVlbmNlIGlzIGFscmVhZHkKYmVpbmcgc3lu Y2hyb25pemVkIGFuZCBzdWdnZXN0aW5nIHRoYXQgJ0FMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVG UkVTSApTRVFVRU5DRVMnIGJlIHJlcnVuIGFmdGVyIHRoZSBjdXJyZW50IHN5bmNocm9uaXphdGlv biBjb21wbGV0ZXMuCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5j IHwgMjAgKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAyMCBpbnNlcnRpb25z KCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCmluZGV4IDQyOTJlN2Zi OGY0Li42NTY5Y2ViYjE0MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2Ny aXB0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMu YwpAQCAtMTM4OSw2ICsxMzg5LDI2IEBAIEFsdGVyU3Vic2NyaXB0aW9uX3JlZnJlc2hfc2VxKFN1 YnNjcmlwdGlvbiAqc3ViKQogCQl7CiAJCQlPaWQJCQlyZWxpZCA9IHN1YnJlbC0+cmVsaWQ7CiAK KwkJCS8qCisJCQkgKiBJZiB0aGUgc2VxdWVuY2UgaXMgYWxyZWFkeSBtYXJrZWQgSU5JVCwgYSBw cmV2aW91cyBSRUZSRVNICisJCQkgKiBTRVFVRU5DRVMgaGFzIG5vdCB5ZXQgYmVlbiBwaWNrZWQg dXAgYnkgdGhlIHNlcXVlbmNlc3luYworCQkJICogd29ya2VyLiAgUmVzZXR0aW5nIGl0IGFnYWlu IGhlcmUgd291bGQgcmFjZSB3aXRoIHRoYXQgd29ya2VyCisJCQkgKiBhcHBseWluZyB0aGUgdmFs dWVzIGl0IGFscmVhZHkgZmV0Y2hlZCBmcm9tIHRoZSBwdWJsaXNoZXIsCisJCQkgKiBwb3NzaWJs eSBsZWF2aW5nIHRoZSBzZXF1ZW5jZSBtYXJrZWQgUkVBRFkgd2l0aCBzdGFsZSBkYXRhLgorCQkJ ICogU2tpcCBpdCBhbmQgbGV0IHRoZSB1c2VyIGtub3cgaW5zdGVhZC4KKwkJCSAqLworCQkJaWYg KHN1YnJlbC0+c3RhdGUgPT0gU1VCUkVMX1NUQVRFX0lOSVQpCisJCQl7CisJCQkJZXJlcG9ydChX QVJOSU5HLAorCQkJCQkJZXJybXNnKCJzZXF1ZW5jZSBcIiVzLiVzXCIgb2Ygc3Vic2NyaXB0aW9u IFwiJXNcIiBpcyBhbHJlYWR5IGJlaW5nIHN5bmNocm9uaXplZCwgc2tpcHBpbmciLAorCQkJCQkJ CSAgIGdldF9uYW1lc3BhY2VfbmFtZShnZXRfcmVsX25hbWVzcGFjZShyZWxpZCkpLAorCQkJCQkJ CSAgIGdldF9yZWxfbmFtZShyZWxpZCksCisJCQkJCQkJICAgc3ViLT5uYW1lKSwKKwkJCQkJCWVy cmhpbnQoIlJlcnVuICVzIGFmdGVyIHRoZSBjdXJyZW50IHN5bmNocm9uaXphdGlvbiBjb21wbGV0 ZXMuIiwKKwkJCQkJCQkJIkFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBTRVFVRU5DRVMi KSk7CisJCQkJY29udGludWU7CisJCQl9CisKIAkJCVVwZGF0ZVN1YnNjcmlwdGlvblJlbFN0YXRl KHN1Yi0+b2lkLCByZWxpZCwgU1VCUkVMX1NUQVRFX0lOSVQsCiAJCQkJCQkJCQkgICBJbnZhbGlk WExvZ1JlY1B0ciwgZmFsc2UpOwogCQkJZXJlcG9ydChERUJVRzEsCi0tIAoyLjUwLjEgKEFwcGxl IEdpdC0xNTUpCgo= --0000000000006c06b9065640ff50 Content-Type: application/octet-stream; name="v1-0002-Add-a-test-for-concurrent-REFRESH-SEQUENCES.patch" Content-Disposition: attachment; filename="v1-0002-Add-a-test-for-concurrent-REFRESH-SEQUENCES.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mrex3p521 RnJvbSBmYzRhMGQzMmY2YmY0MWRiODEzMjU1NTI3OGI1MDdkOGExZTM1ZmEyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMTAgSnVsIDIwMjYgMTg6MDM6MTAgKzA1MzAKU3ViamVjdDogW1BBVENIIHYxIDIvMl0g QWRkIGEgdGVzdCBmb3IgY29uY3VycmVudCBSRUZSRVNIIFNFUVVFTkNFUwoKQWRkIGEgVEFQIHRl c3QgY292ZXJpbmcgdGhlIGNhc2Ugd2hlcmUgJ0FMVEVSIFNVQlNDUklQVElPTiAuLi4KUkVGUkVT SCBTRVFVRU5DRVMnIGlzIGV4ZWN1dGVkIHdoaWxlIGEgc2VxdWVuY2Ugc3luY2hyb25pemF0aW9u IGlzCmFscmVhZHkgaW4gcHJvZ3Jlc3MuCgpUaGUgdGVzdCB1c2VzIGFuIGluamVjdGlvbiBwb2lu dCB0byBwYXVzZSB0aGUgc2VxdWVuY2Ugc3luY2hyb25pemF0aW9uCndvcmtlciBpbW1lZGlhdGVs eSBiZWZvcmUgaXQgYXBwbGllcyB0aGUgZmV0Y2hlZCBzZXF1ZW5jZSB2YWx1ZSB0byB0aGUKc3Vi c2NyaWJlci4gV2hpbGUgdGhlIHdvcmtlciBpcyBwYXVzZWQsIGEgc2Vjb25kICdBTFRFUiBTVUJT Q1JJUFRJT04gLi4uClJFRlJFU0ggU0VRVUVOQ0VTJyBjb21tYW5kIGlzIGlzc3VlZCBhbmQgdmVy aWZpZWQgdG8gZW1pdCB0aGUgZXhwZWN0ZWQKd2FybmluZyBpbmRpY2F0aW5nIHRoYXQgdGhlIHNl cXVlbmNlIGlzIGFscmVhZHkgYmVpbmcgc3luY2hyb25pemVkLgoKVGhpcyB0ZXN0IGV4ZXJjaXNl cyB0aGUgcmFjZSBjb25kaXRpb24gYW5kIHZlcmlmaWVzIHRoYXQgY29uY3VycmVudApyZWZyZXNo IHJlcXVlc3RzIGFyZSBoYW5kbGVkIHNhZmVseSB3aXRob3V0IHJlc2V0dGluZyB0aGUgc3luY2hy b25pemF0aW9uCnN0YXRlIG9mIHNlcXVlbmNlcyB0aGF0IGFyZSBhbHJlYWR5IGJlaW5nIHByb2Nl c3NlZC4KLS0tCiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9zZXF1ZW5jZXN5bmMuYyAgICAgICAg fCAgIDUgKwogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL21lc29uLmJ1aWxkICAgICAgICAgICAgIHwg ICAxICsKIC4uLi90LzAzOV9zZXF1ZW5jZXNfcmVmcmVzaF93YXJuaW5nLnBsICAgICAgICB8IDEy NyArKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMTMzIGluc2VydGlvbnMoKykK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzlfc2VxdWVuY2Vz X3JlZnJlc2hfd2FybmluZy5wbAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvc2VxdWVuY2VzeW5jLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3NlcXVlbmNlc3luYy5jCmluZGV4IDc3MGZhNWRlMTBiLi42MzFiOWM0YmY4OCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zZXF1ZW5jZXN5bmMuYworKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3NlcXVlbmNlc3luYy5jCkBAIC02OCw2ICs2 OCw3IEBACiAjaW5jbHVkZSAidXRpbHMvaW52YWwuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj aGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL2luamVj dGlvbl9wb2ludC5oIgogI2luY2x1ZGUgInV0aWxzL3BnX2xzbi5oIgogI2luY2x1ZGUgInV0aWxz L3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvdXNlcmNvbnRleHQuaCIKQEAgLTU1Miw4ICs1 NTMsMTIgQEAgY29weV9zZXF1ZW5jZXMoV2FsUmVjZWl2ZXJDb25uICpjb25uKQogCQkJc3luY19z dGF0dXMgPSBnZXRfYW5kX3ZhbGlkYXRlX3NlcV9pbmZvKHNsb3QsICZzZXF1ZW5jZV9yZWwsCiAJ CQkJCQkJCQkJCQkJJnNlcWluZm8sICZzZXFpZHgpOwogCQkJaWYgKHN5bmNfc3RhdHVzID09IENP UFlTRVFfU1VDQ0VTUykKKwkJCXsKKwkJCQlJTkpFQ1RJT05fUE9JTlQoInNlcXVlbmNlc3luYy1i ZWZvcmUtY29weS1zZXF1ZW5jZSIsIE5VTEwpOworCiAJCQkJc3luY19zdGF0dXMgPSBjb3B5X3Nl cXVlbmNlKHNlcWluZm8sCiAJCQkJCQkJCQkJCXNlcXVlbmNlX3JlbC0+cmRfcmVsLT5yZWxvd25l cik7CisJCQl9CiAKIAkJCXN3aXRjaCAoc3luY19zdGF0dXMpCiAJCQl7CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9zdWJzY3JpcHRpb24vbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24v bWVzb24uYnVpbGQKaW5kZXggZTcxZTk1YzYyOTcuLjc5ZjdlNWE2NDA1IDEwMDY0NAotLS0gYS9z cmMvdGVzdC9zdWJzY3JpcHRpb24vbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL21lc29uLmJ1aWxkCkBAIC00OCw2ICs0OCw3IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzAz Nl9zZXF1ZW5jZXMucGwnLAogICAgICAgJ3QvMDM3X2V4Y2VwdC5wbCcsCiAgICAgICAndC8wMzhf d2Fsc25kX3NodXRkb3duX3RpbWVvdXQucGwnLAorICAgICAgJ3QvMDM5X3NlcXVlbmNlc19yZWZy ZXNoX3dhcm5pbmcucGwnLAogICAgICAgJ3QvMTAwX2J1Z3MucGwnLAogICAgIF0sCiAgIH0sCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzlfc2VxdWVuY2VzX3JlZnJlc2hf d2FybmluZy5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzOV9zZXF1ZW5jZXNfcmVmcmVz aF93YXJuaW5nLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMzUw OGVmMzc4MAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzOV9z ZXF1ZW5jZXNfcmVmcmVzaF93YXJuaW5nLnBsCkBAIC0wLDAgKzEsMTI3IEBACisjIENvcHlyaWdo dCAoYykgMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworIyBUZXN0 IHRoYXQgQUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFNFUVVFTkNFUyBlbWl0cyBhIFdB Uk5JTkcgYW5kCisjIHNraXBzIHJlc2V0dGluZyBhIHNlcXVlbmNlIHRoYXQgaXMgYWxyZWFkeSBp biBJTklUIHN0YXRlLCBpLmUuIG9uZSB3aG9zZQorIyBwcmV2aW91cyBSRUZSRVNIIFNFUVVFTkNF UyBoYXMgbm90IHlldCBiZWVuIHBpY2tlZCB1cCBieSB0aGUKKyMgc2VxdWVuY2VzeW5jIHdvcmtl ci4KKyMKKyMgVGhpcyBpcyBleGVyY2lzZWQgZGV0ZXJtaW5pc3RpY2FsbHkgdXNpbmcgYW4gaW5q ZWN0aW9uIHBvaW50IHBsYWNlZCBqdXN0CisjIGJlZm9yZSBjb3B5X3NlcXVlbmNlKCkgaXMgY2Fs bGVkIGluIHRoZSBzZXF1ZW5jZXN5bmMgd29ya2VyJ3MgbWFpbiBsb29wOgorIworIyAxLiBSdW4g YSBmaXJzdCBSRUZSRVNIIFNFUVVFTkNFUywgd2hpY2ggcHV0cyB0aGUgc2VxdWVuY2UgaW50byBJ TklUIHN0YXRlCisjICAgIGFuZCBsZXRzIHRoZSBzZXF1ZW5jZXN5bmMgd29ya2VyIHN0YXJ0Lgor IyAyLiBUaGUgd29ya2VyIGJsb2NrcyBhdCB0aGUgaW5qZWN0aW9uIHBvaW50IGFmdGVyIGZldGNo aW5nIHRoZSBzZXF1ZW5jZSdzCisjICAgIHJlbW90ZSB2YWx1ZXMgYnV0IGJlZm9yZSBhcHBseWlu ZyB0aGVtIC8gbWFya2luZyB0aGUgcm93IFJFQURZLgorIyAzLiBSdW4gYSBzZWNvbmQgUkVGUkVT SCBTRVFVRU5DRVMgd2hpbGUgdGhlIHdvcmtlciBpcyBzdGlsbCBibG9ja2VkLiBTaW5jZQorIyAg ICB0aGUgc2VxdWVuY2UgaXMgc3RpbGwgaW4gSU5JVCBzdGF0ZSwgdGhlIGNvbW1hbmQgbXVzdCBl bWl0IGEgV0FSTklORworIyAgICAod2l0aCBhIEhJTlQgdG8gcmV0cnkgbGF0ZXIpIGFuZCBtdXN0 IG5vdCBkaXN0dXJiIHRoZSByb3cuCisjIDQuIFJlbGVhc2UgdGhlIGluamVjdGlvbiBwb2ludCBh bmQgbGV0IHRoZSB3b3JrZXIgZmluaXNoOyB0aGUgc2VxdWVuY2UKKyMgICAgc2hvdWxkIHJlYWNo IFJFQURZIG5vcm1hbGx5LgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdh bGwnOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVz dDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKKyRub2RlX3B1Ymxpc2hlci0+ aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9wdWJsaXNoZXItPnN0 YXJ0OworCitteSAkbm9kZV9zdWJzY3JpYmVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+ bmV3KCdzdWJzY3JpYmVyJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5pbml0OworJG5vZGVfc3Vic2Ny aWJlci0+c3RhcnQ7CisKKyMgVGhpcyB0ZXN0IGRlcGVuZHMgb24gYW4gaW5qZWN0aW9uIHBvaW50 IHRvIGJsb2NrIHRoZSBzZXF1ZW5jZXN5bmMgd29ya2VyCisjIHJpZ2h0IGJlZm9yZSBpdCBhcHBs aWVzIGEgc2VxdWVuY2UncyBmZXRjaGVkIHZhbHVlcy4KK215ICRpbmplY3Rpb25fcG9pbnRzX3N1 cHBvcnRlZCA9CisgICRub2RlX3N1YnNjcmliZXItPmNoZWNrX2V4dGVuc2lvbignaW5qZWN0aW9u X3BvaW50cycpOworCitpZiAoISRpbmplY3Rpb25fcG9pbnRzX3N1cHBvcnRlZCkKK3sKKwlwbGFu IHNraXBfYWxsID0+ICdTZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBpbmplY3Rpb24gcG9pbnRzLic7 Cit9CisKKyRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAor CSJzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMgPSAnaW5qZWN0aW9uX3BvaW50cyciKTsKKyRub2Rl X3N1YnNjcmliZXItPnJlc3RhcnQ7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIEVYVEVOU0lPTiBpbmplY3Rpb25fcG9pbnRzOyIpOworCisjIElkZW50 aWNhbCBzZXF1ZW5jZSBkZWZpbml0aW9ucyBvbiBib3RoIG5vZGVzLgorbXkgJGRkbCA9IHFxKENS RUFURSBTRVFVRU5DRSByZWdyZXNzX3NlcTE7KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICRkZGwpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICRkZGwpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJD UkVBVEUgUFVCTElDQVRJT04gcmVncmVzc19zZXFfcHViIEZPUiBBTEwgU0VRVUVOQ0VTIik7CisK K215ICRwdWJsaXNoZXJfY29ubnN0ciA9ICRub2RlX3B1Ymxpc2hlci0+Y29ubnN0ciAuICcgZGJu YW1lPXBvc3RncmVzJzsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSJDUkVBVEUgU1VCU0NSSVBUSU9OIHJlZ3Jlc3Nfc2VxX3N1YiBDT05ORUNUSU9OICckcHVibGlz aGVyX2Nvbm5zdHInIFBVQkxJQ0FUSU9OIHJlZ3Jlc3Nfc2VxX3B1YiIKKyk7CisKKyMgV2FpdCBm b3IgdGhlIGluaXRpYWwgc3luYyB0byBjb21wbGV0ZSBiZWZvcmUgdGVzdGluZyBSRUZSRVNIIFNF UVVFTkNFUy4KKyRub2RlX3N1YnNjcmliZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywK KwkiU0VMRUNUIGNvdW50KCopID0gMCBGUk9NIHBnX3N1YnNjcmlwdGlvbl9yZWwgV0hFUkUgc3Jz dWJzdGF0ZSA8PiAnciciKQorICBvciBkaWUgInRpbWVkIG91dCB3YWl0aW5nIGZvciBpbml0aWFs IHNlcXVlbmNlIHN5bmMiOworCisjIEF0dGFjaCB0aGUgaW5qZWN0aW9uIHBvaW50IHRoYXQgd2ls bCBibG9jayB0aGUgc2VxdWVuY2VzeW5jIHdvcmtlciBqdXN0CisjIGJlZm9yZSBpdCBhcHBsaWVz IGEgc2VxdWVuY2UncyBmZXRjaGVkIHZhbHVlcy4KKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19hdHRhY2goJ3NlcXVlbmNl c3luYy1iZWZvcmUtY29weS1zZXF1ZW5jZScsICd3YWl0Jyk7IgorKTsKKworIyBGaXJzdCBSRUZS RVNIIFNFUVVFTkNFUzogcHV0cyB0aGUgc2VxdWVuY2UgaW50byBJTklUIGFuZCBzdGFydHMgdGhl CisjIHNlcXVlbmNlc3luYyB3b3JrZXIuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3Nfc2VxX3N1YiBSRUZSRVNIIFNF UVVFTkNFUyIpOworCisjIFdhaXQgdW50aWwgdGhlIHdvcmtlciBpcyBibG9ja2VkIGF0IHRoZSBp bmplY3Rpb24gcG9pbnQsIGkuZS4gYWZ0ZXIKKyMgZmV0Y2hpbmcgdGhlIHJlbW90ZSB2YWx1ZXMg YnV0IGJlZm9yZSBhcHBseWluZyB0aGVtLgorJG5vZGVfc3Vic2NyaWJlci0+d2FpdF9mb3JfZXZl bnQoJ2xvZ2ljYWwgcmVwbGljYXRpb24gc2VxdWVuY2VzeW5jIHdvcmtlcicsCisJJ3NlcXVlbmNl c3luYy1iZWZvcmUtY29weS1zZXF1ZW5jZScpOworCitteSAkcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBzcnN1YnN0YXRlIEZST00gcGdf c3Vic2NyaXB0aW9uX3JlbCBXSEVSRSBzcnJlbGlkID0gJ3JlZ3Jlc3Nfc2VxMSc6OnJlZ2NsYXNz IgorKTsKK2lzKCRyZXN1bHQsICdpJywKKwknc2VxdWVuY2UgaXMgc3RpbGwgaW4gSU5JVCBzdGF0 ZSB3aGlsZSB0aGUgd29ya2VyIGlzIGJsb2NrZWQnKTsKKworIyBTZWNvbmQgUkVGUkVTSCBTRVFV RU5DRVMgd2hpbGUgdGhlIHNlcXVlbmNlIGlzIHN0aWxsIGluIElOSVQ6IGl0IG11c3QKKyMgbm90 IGRpc3R1cmIgdGhlIHJvdywgYW5kIG11c3QgZW1pdCBhIFdBUk5JTkcgd2l0aCBhIEhJTlQgaW5z dGVhZC4KK215ICgkY21kcmV0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlX3N1YnNjcmliZXIt PnBzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3Nfc2VxX3N1YiBS RUZSRVNIIFNFUVVFTkNFUyIpOworCitsaWtlKAorCSRzdGRlcnIsCisJcXIvV0FSTklORzouKnNl cXVlbmNlICJwdWJsaWMucmVncmVzc19zZXExIiBvZiBzdWJzY3JpcHRpb24gInJlZ3Jlc3Nfc2Vx X3N1YiIgaXMgYWxyZWFkeSBiZWluZyBzeW5jaHJvbml6ZWQsIHNraXBwaW5nLywKKwknc2Vjb25k IFJFRlJFU0ggU0VRVUVOQ0VTIHdhcm5zIHRoYXQgdGhlIHNlcXVlbmNlIGlzIGFscmVhZHkgYmVp bmcgc3luY2hyb25pemVkJworKTsKK2xpa2UoCisJJHN0ZGVyciwKKwlxci9ISU5UOi4qUmVydW4g QUxURVIgU1VCU0NSSVBUSU9OIFwuXC5cLiBSRUZSRVNIIFNFUVVFTkNFUyBhZnRlciB0aGUgY3Vy cmVudCBzeW5jaHJvbml6YXRpb24gY29tcGxldGVzXC4vLAorCSdzZWNvbmQgUkVGUkVTSCBTRVFV RU5DRVMgaGludHMgdG8gcmV0cnkgbGF0ZXInCispOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBzcnN1YnN0YXRlIEZST00gcGdf c3Vic2NyaXB0aW9uX3JlbCBXSEVSRSBzcnJlbGlkID0gJ3JlZ3Jlc3Nfc2VxMSc6OnJlZ2NsYXNz IgorKTsKK2lzKCRyZXN1bHQsICdpJywKKwknc2VxdWVuY2UgcmVtYWlucyBpbiBJTklUIHN0YXRl IGFmdGVyIHRoZSBzZWNvbmQgUkVGUkVTSCBTRVFVRU5DRVMnKTsKKworIyBSZWxlYXNlIHRoZSB3 b3JrZXIgYW5kIGxldCBpdCBmaW5pc2ggbm9ybWFsbHkuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIGluamVjdGlvbl9wb2ludHNfd2FrZXVwKCdzZXF1 ZW5jZXN5bmMtYmVmb3JlLWNvcHktc2VxdWVuY2UnKTsKKwkgU0VMRUNUIGluamVjdGlvbl9wb2lu dHNfZGV0YWNoKCdzZXF1ZW5jZXN5bmMtYmVmb3JlLWNvcHktc2VxdWVuY2UnKTsiCispOworCisk bm9kZV9zdWJzY3JpYmVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBj b3VudCgqKSA9IDAgRlJPTSBwZ19zdWJzY3JpcHRpb25fcmVsIFdIRVJFIHNyc3Vic3RhdGUgPD4g J3InIikKKyAgb3IgZGllICJ0aW1lZCBvdXQgd2FpdGluZyBmb3Igc2VxdWVuY2UgdG8gcmVhY2gg UkVBRFkgc3RhdGUiOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJIlNFTEVDVCBsYXN0X3ZhbHVlLCBpc19jYWxsZWQgRlJPTSByZWdyZXNzX3Nl cTEiKTsKK2lzKCRyZXN1bHQsICcxfGYnLCAnc2VxdWVuY2UgcmVhY2hlcyBSRUFEWSB3aXRoIGV4 cGVjdGVkIHZhbHVlcycpOworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNTAuMSAoQXBwbGUgR2l0 LTE1NSkKCg== --0000000000006c06b9065640ff50--