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 1wGKiO-00675B-0H for pgsql-hackers@arkaria.postgresql.org; Fri, 24 Apr 2026 17:53:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wGKiJ-007F9r-32 for pgsql-hackers@arkaria.postgresql.org; Fri, 24 Apr 2026 17:53:15 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wGKiJ-007F9f-1e for pgsql-hackers@lists.postgresql.org; Fri, 24 Apr 2026 17:53:15 +0000 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wGKiG-00000002bvH-3Q35 for pgsql-hackers@lists.postgresql.org; Fri, 24 Apr 2026 17:53:14 +0000 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-3567e2b4159so5636274a91.0 for ; Fri, 24 Apr 2026 10:53:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1777053192; cv=none; d=google.com; s=arc-20240605; b=GNc4ZFpOguV77fPrDa/RK6vpEE25XfKqfBDJ5Z7jSx0jGlmkWDGJU+vswMFddF89nA 5KRoZv/7iQZJhmgGvqTxbrS02QOaeZNDwPF1AEDHA3rGcOSJ3TOkxjvyS59SDlSLNt43 9k2HnGxjDLij+EnVPHwTl0uvSfBAxUo/0JOOtLvHL1+/XDJoOKQk6WEhwGsN4dNzkU3c sLxU0nJT/EbGaprBtrdqpXucpD2+3LTOxPsBdebGXhgGbSnI0+jFWEf9dG240KVIasLA 74TH9qz/i1/rWdtZLOhJTmLKvqycb+LCjd40amAzBCWqvYJbe010hRjIwKthz4uvQ6PN y5Vg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=q+ZWeZUUsZ9usRzyRKVVT+ariokdwK/psrUw/1zw1g0=; fh=P1wfuKRh6XXmz71iBR5SY5n4p/dKbnMDLwYyT9VhvFo=; b=SlObeQ719XyTAYOo4pHOe9yTZTt3o7ernekyLnZ1A0khBLw8jngKK1ivvtpvOdt1ai s2oRqr6WCq7YFD0okNAOWN9yxRuZ3ex8UPZEpDwsT4fkxVQwagfzaWHkBnucS0cKDI1c hOLeKlYnxeQ5fIzA/POy+eRtjpcCfbWY7t4zMLn5qHlD2iw5fdqebgEymTICEhUWHReV 23tEFAsGwdHVDtr2yjpPpJ5JOeVhAoCwkIz3hbDJkgkLulfzbN8iss2xZTQRM2qj6uKi 53aEKxSvJEvUxsum9cb8KUFWg2ZUT9eG8QGD2Ifji+uAYDjA9eEh2wDT2ZqXUisGKIbQ 2KkA==; darn=lists.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=1777053192; x=1777657992; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=q+ZWeZUUsZ9usRzyRKVVT+ariokdwK/psrUw/1zw1g0=; b=D9sT6c0dWx9XirM90mxjx3y92sFaHhl5+/l3h95FeGe1ZYAPvBUlBabRdvyl+0OH1L Leji4LPqBj+rsC49feDxybDUhNFQS2eWqzwe92MBmw4DH+uGqM8R/Dy/QWEeZpYQwazv 5yJM1lliLIzswLDAOEOE31VE1JC8LuGyKt2U7bpTMSk2RZ3H+E7WPXiVgMDqR17Tr7y7 PGSllydbfspQ26mlcGrCwO0qHDOZbWKLRfXu9NQvTv+PIcboZRLBtwxuBJzsIuZW82XY 0GtsM4j1T6CTg9ULamtJADiG32Md1Q0GvHZUYGMJnICbuo7pL5LhaEnPiu0ryRp/2OxZ XzcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777053192; x=1777657992; h=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; bh=q+ZWeZUUsZ9usRzyRKVVT+ariokdwK/psrUw/1zw1g0=; b=Wa8aHIClcifP7sqTsuBME0FGQf71by04FJXtLgMexCUWcndlnfakuxtRc3/c0dh2P6 VGJmL1vr9tABfCN3PvsWN5BgrCjMp6RZsge7Cud/zCS3VDSRFlkqvR9bSw4hJPFBwTXD SV+UC7yZgyOR2sIBrLs7bZyXjCE9Mqd4ORwQB7qJH+ulSgpHQhfs5EucMQ2Qitt1wC/j wdi8+69LLV2Xv8TiTa3nCH4f0/3IUrZIe8Hrs8s8sJi43mxMbkvoCdsW9pUKYaa9qzjc yRUynlct+KVpQjSNoOwae4Av0UMKduF/2VCAjSNd2pRVoNR+5Uj80QLop6x+LTTH/KC4 eLAg== X-Forwarded-Encrypted: i=1; AFNElJ/cLQYhAUA2c8lNnoW7qLeS3FluXyT0TggpzMQc74TAaZDqdYqT0kHQpvphKOSGdLLsWVLMvS0mz8B6x2Nc@lists.postgresql.org X-Gm-Message-State: AOJu0Yyv2BRNAJooBqzTMm6kf/WpZrJj+uNQqeCi2WKK51HZrH05ryKF dhNH4puQEO/mb9sl/IL8SVyXsUqsz12j4y0sjTjrZNe0dPMFLxTyZBmkPorWsaXVAQVGNz883KU C/Ij1Zt8kdoTRPoJ2WbPeAEhc8WKu4GY= X-Gm-Gg: AeBDieuvfj4h60TNEyg020924omHWjyyi0FzZbp7uUSaYYFRMhWMyX6seN1cA0fI7NV PMFBReBkcWzVlj9knZsBL7hn3No/19cHB57sUgevVP1PtkY193RSSAlBtVqD8gn5YqvljTBpaPn vSMk6E9zZMYiBijpIpTn3v58913dSdjHIQID0IbG0psMPf9M6FWUM2b+4+YPxupMFQxug/kefUQ CQpAVfgjYYYRj7HkRkQDmXOINGQPYVNkRSuBalAOrRcKIGZTjzOD9HlP495evZJBWiJVDppwpo9 /VaURYn/5LeYAHOICvBk61IRy3FIIpO4pr6gk6nKykUQb9ZunHfZl7ZdTqQ98g== X-Received: by 2002:a17:90b:394e:b0:359:d54:846f with SMTP id 98e67ed59e1d1-361403f10f9mr32467821a91.7.1777053192138; Fri, 24 Apr 2026 10:53:12 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Masahiko Sawada Date: Fri, 24 Apr 2026 10:52:31 -0700 X-Gm-Features: AQROBzAa79xB-_uRbzLykM_dOH-QZHkFMcj6HrqFabiR_eeYEKxAHUWrNvHN0uQ Message-ID: Subject: Re: Startup process deadlock: WaitForProcSignalBarriers vs aux process To: Andres Freund Cc: Matthias van de Meent , Thomas Munro , PostgreSQL Hackers , Heikki Linnakangas Content-Type: multipart/mixed; boundary="00000000000043c53e0650387054" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000043c53e0650387054 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Apr 22, 2026 at 12:05=E2=80=AFPM Andres Freund = wrote: > > Hi, > > On 2026-04-22 13:21:02 +0200, Matthias van de Meent wrote: > > If the PSB is emitted (and signaled to checkpointer) before the > > checkpointer has registered its SIGUSR1 handler, then the checkpointer > > won't receive the notice to check its procsignal slots, it won't > > notice the updated procsignal flags, and it won't process the PSB; not > > until it receives a new SIGUSR1. > > > > Signals are sent to all processes that have their procsignal pss_pid > > set, which is true for every process which has called ProcSignalInit, > > which for the checkpointer (like other aux processes) happens in > > AuxiliaryProcessMainCommon. However, checkpointer (also like other aux > > processes) calls AuxiliaryProcessMainCommon before registering its > > signal handlers, creating a small window in time where signals are > > sent, but not handled. > > Hm. Have we confirmed this happens? > > CheckpointerMain() is called with all signals masked, so it should be ok = for > the signal handler to only be set up after AuxiliaryProcessMainCommon(), = as > long as it happens before > > /* > * Unblock signals (they were blocked when the postmaster forked = us) > */ > sigprocmask(SIG_SETMASK, &UnBlockSig, NULL); > > as the signal delivery should be held until after unblocking signals. Right. The postmaster blocks all signals before starting child process as the following comment explains: /* * We start postmaster children with signals blocked. This allows the= m to * install their own handlers before unblocking, to avoid races where = they * might run the postmaster's handler and miss an important control * signal. With more analysis this could potentially be relaxed. */ sigprocmask(SIG_SETMASK, &BlockSig, &save_mask); Investigating the issue, I found there is a race condition between the procsignal initialization and emitting signal barrier that could be the cause of this issue. Imagine the following scenario: 1. In ProcSignalInit(), the checkpointer initializes its slot->pss_barrierGeneration with the global generation. 2. In EmitProcSignalBarrier(), the startup checks the checkpointer's procsignal slot but it skips emitting the signal as slot->pss_pid is still 0. It can happen even though the checkpointer holds a spinlock on its slot during the initialization because the first pid check is done without a spinlock acquisition. 3. The checkpointer sets its pid to slot->pss_pid and releases the spin loc= k. 4. In WaitForProcSignalBarrier(), the startup checks the checkpointer's procsignal slot that has already initialized the pss_barrierGeneration, and waits for it to be updated. However, the checkpointer never updates its barrier generation as it doesn't get the signal. Another similar issue I found would be that child processes could miss the PROCSIGNAL_BARRIER_UPDATE_XLOG_LOGICAL_INFO signal during the initialization and end up in an inconsistent state because InitializeProcessXLogLogicalInfo() is called (in BaseInit()) before ProcSignalInit(). If the startup emits the signal to a process who is between two steps, the process would not reflect the latest XLogLogicalInfo state. I think we should move InitializeProcessXLogLogicalInfo() after ProcSignalInit() like we do so for InitLocalDataChecksumState(). I've attached the patch for fixing the latter problem as the fix is straightforward. Regards, --=20 Masahiko Sawada Amazon Web Services: https://aws.amazon.com --00000000000043c53e0650387054 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Fix-race-condition-in-XLogLogicalInfo-and-ProcSignal.patch" Content-Disposition: attachment; filename="0001-Fix-race-condition-in-XLogLogicalInfo-and-ProcSignal.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mod7i4k00 RnJvbSAwMTM3MDg3OWJiMGZlNDA2NWQwNmQ5MmVmYjAxNTgyZDFiMWRmOTk2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXNhaGlrbyBTYXdhZGEgPHNhd2FkYS5tc2hrQGdtYWlsLmNv bT4KRGF0ZTogRnJpLCAyNCBBcHIgMjAyNiAxMDozNjo1NSAtMDcwMApTdWJqZWN0OiBbUEFUQ0hd IEZpeCByYWNlIGNvbmRpdGlvbiBpbiBYTG9nTG9naWNhbEluZm8gYW5kIFByb2NTaWduYWwKIGlu aXRpYWxpemF0aW9uCgpQcmV2aW91c2x5LCBJbml0aWFsaXplUHJvY2Vzc1hMb2dMb2dpY2FsSW5m bygpIHdhcyBjYWxsZWQgYmVmb3JlClByb2NTaWduYWxJbml0KCkuIFRoaXMgY3JlYXRlZCBhIHdp bmRvdyB3aGVyZSBhIHByb2Nlc3MgY291bGQgbWlzcyBhCnNpZ25hbCBiYXJyaWVyIGlmIGl0IHdh cyBpc3N1ZWQgYmV0d2VlbiB0aGVzZSB0d28gY2FsbHMuIEFzIGEgcmVzdWx0LAp0aGUgcHJvY2Vz cyBjb3VsZCBmYWlsIHRvIHVwZGF0ZSBpdHMgbG9jYWwgWExvZ0xvZ2ljYWxJbmZvIGNhY2hlLAps ZWFkaW5nIHRvIGFuIGluY29uc2lzdGVudCBsb2dpY2FsIGRlY29kaW5nIHN0YXRlLgoKVGhpcyBj b21taXQgZml4ZXMgdGhpcyBieSBtb3ZpbmcgSW5pdGlhbGl6ZVByb2Nlc3NYTG9nTG9naWNhbElu Zm8oKQphZnRlciBQcm9jU2lnbmFsSW5pdCgpLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgcHJvY2Vz cyBpcyByZWdpc3RlcmVkIHRvCnBhcnRpY2lwYXRlIGluIHNpZ25hbCBiYXJyaWVycyBiZWZvcmUg aXRzIHN0YXRlIGlzIGluaXRpYWxpemVkLApwcmV2ZW50aW5nIGl0IGZyb20gbWlzc2luZyBhbnkg c3RhdGUgY2hhbmdlIHByb3BhZ2F0ZWQgZHVyaW5nIHRoZQpzdGFydHVwIHNlcXVlbmNlLgoKRGlz Y3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8KLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVy L2F1eHByb2Nlc3MuYyB8IDE3ICsrKysrKysrKysrKy0tLS0tCiBzcmMvYmFja2VuZC91dGlscy9p bml0L3Bvc3Rpbml0LmMgICB8IDIwICsrKysrKysrKysrKy0tLS0tLS0tCiAyIGZpbGVzIGNoYW5n ZWQsIDI0IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9h dXhwcm9jZXNzLmMKaW5kZXggOGZkYzUxOGIzYTEuLjAxY2NlZDYxNDkyIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuYworKysgYi9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL2F1eHByb2Nlc3MuYwpAQCAtNzEsMTIgKzcxLDE2IEBAIEF1eGlsaWFyeVByb2Nlc3NN YWluQ29tbW9uKHZvaWQpCiAJUHJvY1NpZ25hbEluaXQoTlVMTCwgMCk7CiAKIAkvKgotCSAqIElu aXRpYWxpemUgYSBsb2NhbCBjYWNoZSBvZiB0aGUgZGF0YV9jaGVja3N1bV92ZXJzaW9uLCB0byBi ZSB1cGRhdGVkIGJ5Ci0JICogdGhlIHByb2NzaWduYWwtYmFzZWQgYmFycmllcnMuCisJICogSW5p dGlhbGl6ZSBsb2NhbCBzdGF0ZXMsIHRvIGJlIHVwZGF0ZWQgYnkgdGhlIHByb2NzaWduYWwtYmFz ZWQKKwkgKiBiYXJyaWVycy4KIAkgKgotCSAqIFRoaXMgaW50ZW50aW9uYWxseSBoYXBwZW5zIGFm dGVyIGluaXRpYWxpemluZyB0aGUgcHJvY3NpZ25hbCwgb3RoZXJ3aXNlCi0JICogd2UgbWlnaHQg bWlzcyBhIHN0YXRlIGNoYW5nZS4gVGhpcyBtZWFucyB3ZSBjYW4gZ2V0IGEgYmFycmllciBmb3Ig dGhlCi0JICogc3RhdGUgd2UndmUganVzdCBpbml0aWFsaXplZCAtIGJ1dCBpdCBjYW4gaGFwcGVu IG9ubHkgb25jZS4KKwkgKiBUaGVzZSBpbml0aWFsaXphdGlvbiBpbnRlbnRpb25hbGx5IGhhcHBl bnMgYWZhdGVyIGluaXRpYWxpemluZyB0aGUKKwkgKiBwcm9jc2lnbmFsLCBvdGhlcndpc2Ugd2Ug bWlnaHQgbWlzcyBhIHN0YXRlIGNoYW5nZS4gVGhpcyBtZWFucyB3ZSBjYW4KKwkgKiBnZXQgYSBi YXJyaWVyIGZvciB0aGUgc3RhdGUgd2UndmUganVzdCBpbml0aWFsaXplZC4KKwkgKi8KKworCS8q CisJICogSW5pdGlhbGl6ZSBhIGxvY2FsIGNhY2hlIG9mIHRoZSBkYXRhX2NoZWNrc3VtX3ZlcnNp b24uCiAJICoKIAkgKiBUaGUgcG9zdG1hc3RlciAod2hpY2ggaXMgd2hhdCBnZXRzIGZvcmtlZCBp bnRvIHRoZSBuZXcgY2hpbGQgcHJvY2VzcykKIAkgKiBkb2VzIG5vdCBoYW5kbGUgYmFycmllcnMs IHRoZXJlZm9yZSBpdCBtYXkgbm90IGhhdmUgdGhlIGN1cnJlbnQgdmFsdWUKQEAgLTg4LDYgKzky LDkgQEAgQXV4aWxpYXJ5UHJvY2Vzc01haW5Db21tb24odm9pZCkKIAkgKi8KIAlJbml0TG9jYWxE YXRhQ2hlY2tzdW1TdGF0ZSgpOwogCisJLyogSW5pdGlhbGl6ZSBsb2dpY2FsIGluZm8gV0FMIGxv Z2dpbmcgc3RhdGUgKi8KKwlJbml0aWFsaXplUHJvY2Vzc1hMb2dMb2dpY2FsSW5mbygpOworCiAJ LyoKIAkgKiBBdXhpbGlhcnkgcHJvY2Vzc2VzIGRvbid0IHJ1biB0cmFuc2FjdGlvbnMsIGJ1dCB0 aGV5IG1heSBuZWVkIGEKIAkgKiByZXNvdXJjZSBvd25lciBhbnl3YXkgdG8gbWFuYWdlIGJ1ZmZl ciBwaW5zIGFjcXVpcmVkIG91dHNpZGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2lu aXQvcG9zdGluaXQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvcG9zdGluaXQuYwppbmRleCA2 ZjA3NDAxM2FhOS4uOTZiMDZlNDQ0ZWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2lu aXQvcG9zdGluaXQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMKQEAg LTY2Miw5ICs2NjIsNiBAQCBCYXNlSW5pdCh2b2lkKQogCS8qIEluaXRpYWxpemUgbG9jayBtYW5h Z2VyJ3MgbG9jYWwgc3RydWN0cyAqLwogCUluaXRMb2NrTWFuYWdlckFjY2VzcygpOwogCi0JLyog SW5pdGlhbGl6ZSBsb2dpY2FsIGluZm8gV0FMIGxvZ2dpbmcgc3RhdGUgKi8KLQlJbml0aWFsaXpl UHJvY2Vzc1hMb2dMb2dpY2FsSW5mbygpOwotCiAJLyoKIAkgKiBJbml0aWFsaXplIHJlcGxpY2F0 aW9uIHNsb3RzIGFmdGVyIHBnc3RhdC4gVGhlIGV4aXQgaG9vayBtaWdodCBuZWVkIHRvCiAJICog ZHJvcCBlcGhlbWVyYWwgc2xvdHMsIHdoaWNoIGluIHR1cm4gdHJpZ2dlcnMgc3RhdHMgcmVwb3J0 aW5nLgpAQCAtNzU5LDEyICs3NTYsMTYgQEAgSW5pdFBvc3RncmVzKGNvbnN0IGNoYXIgKmluX2Ri bmFtZSwgT2lkIGRib2lkLAogCVByb2NTaWduYWxJbml0KE15Q2FuY2VsS2V5LCBNeUNhbmNlbEtl eUxlbmd0aCk7CiAKIAkvKgotCSAqIEluaXRpYWxpemUgYSBsb2NhbCBjYWNoZSBvZiB0aGUgZGF0 YV9jaGVja3N1bV92ZXJzaW9uLCB0byBiZSB1cGRhdGVkIGJ5Ci0JICogdGhlIHByb2NzaWduYWwt YmFzZWQgYmFycmllcnMuCisJICogSW5pdGlhbGl6ZSBsb2NhbCBzdGF0ZXMsIHRvIGJlIHVwZGF0 ZWQgYnkgdGhlIHByb2NzaWduYWwtYmFzZWQKKwkgKiBiYXJyaWVycy4KIAkgKgotCSAqIFRoaXMg aW50ZW50aW9uYWxseSBoYXBwZW5zIGFmdGVyIGluaXRpYWxpemluZyB0aGUgcHJvY3NpZ25hbCwg b3RoZXJ3aXNlCi0JICogd2UgbWlnaHQgbWlzcyBhIHN0YXRlIGNoYW5nZS4gVGhpcyBtZWFucyB3 ZSBjYW4gZ2V0IGEgYmFycmllciBmb3IgdGhlCi0JICogc3RhdGUgd2UndmUganVzdCBpbml0aWFs aXplZC4KKwkgKiBUaGVzZSBpbml0aWFsaXphdGlvbiBpbnRlbnRpb25hbGx5IGhhcHBlbnMgYWZh dGVyIGluaXRpYWxpemluZyB0aGUKKwkgKiBwcm9jc2lnbmFsLCBvdGhlcndpc2Ugd2UgbWlnaHQg bWlzcyBhIHN0YXRlIGNoYW5nZS4gVGhpcyBtZWFucyB3ZSBjYW4KKwkgKiBnZXQgYSBiYXJyaWVy IGZvciB0aGUgc3RhdGUgd2UndmUganVzdCBpbml0aWFsaXplZC4KKwkgKi8KKworCS8qCisJICog SW5pdGlhbGl6ZSBhIGxvY2FsIGNhY2hlIG9mIHRoZSBkYXRhX2NoZWNrc3VtX3ZlcnNpb24uCiAJ ICoKIAkgKiBUaGUgcG9zdG1hc3RlciAod2hpY2ggaXMgd2hhdCBnZXRzIGZvcmtlZCBpbnRvIHRo ZSBuZXcgY2hpbGQgcHJvY2VzcykKIAkgKiBkb2VzIG5vdCBoYW5kbGUgYmFycmllcnMsIHRoZXJl Zm9yZSBpdCBtYXkgbm90IGhhdmUgdGhlIGN1cnJlbnQgdmFsdWUKQEAgLTc3Niw2ICs3NzcsOSBA QCBJbml0UG9zdGdyZXMoY29uc3QgY2hhciAqaW5fZGJuYW1lLCBPaWQgZGJvaWQsCiAJICovCiAJ SW5pdExvY2FsRGF0YUNoZWNrc3VtU3RhdGUoKTsKIAorCS8qIEluaXRpYWxpemUgbG9naWNhbCBp bmZvIFdBTCBsb2dnaW5nIHN0YXRlICovCisJSW5pdGlhbGl6ZVByb2Nlc3NYTG9nTG9naWNhbElu Zm8oKTsKKwogCS8qCiAJICogQWxzbyBzZXQgdXAgdGltZW91dCBoYW5kbGVycyBuZWVkZWQgZm9y IGJhY2tlbmQgb3BlcmF0aW9uLiAgV2UgbmVlZAogCSAqIHRoZXNlIGluIGV2ZXJ5IGNhc2UgZXhj ZXB0IGJvb3RzdHJhcC4KLS0gCjIuNTMuMAoK --00000000000043c53e0650387054--