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 1w9T8S-001SYf-11 for pgsql-hackers@arkaria.postgresql.org; Sun, 05 Apr 2026 19:27:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w9T8P-004arc-0q for pgsql-hackers@arkaria.postgresql.org; Sun, 05 Apr 2026 19:27:49 +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 1w9T8O-004arT-2u for pgsql-hackers@lists.postgresql.org; Sun, 05 Apr 2026 19:27:49 +0000 Received: from mail-ej1-x642.google.com ([2a00:1450:4864:20::642]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w9T8N-00000000m5u-09kZ for pgsql-hackers@lists.postgresql.org; Sun, 05 Apr 2026 19:27:49 +0000 Received: by mail-ej1-x642.google.com with SMTP id a640c23a62f3a-b9c62fc8debso312943366b.0 for ; Sun, 05 Apr 2026 12:27:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775417266; cv=none; d=google.com; s=arc-20240605; b=DfV8C7n7L3+EEyM/+0b7aLf4YsZq+BpLQCmDgSye7DMKkBqd+hH5NUKGc7u1stqwHt Iihx0T1W8zDIcnZaXmaSiyd8gRPeT6aKqxYpSZd6A43JVxT0Di1QhsINqfGOkORux+qH M1664NM7nXhudKsePWfbObOnLsjk1j6jiIPrY8v+UnBBKJXpjQpWLFISwoF7sg3rA7T9 nIwjAzqgybv89bvroozHZ5UtA0m6pgpznwzQG3V1ADIxxc5NS2KWvqD0bRA5Keou1Ut4 TOiI/ysDgmATJumpaGBwz1gVxcWb3uI4YF3fihN+eSPu6e44K2q7fvyxQmTWzd3qlEOH w49A== 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=8fw8vfZ6qJPe2J+FOZu4jI1IHpbaoUcobm9l9o+ZqG4=; fh=12slLTaaBGyAA4mGdizReIdE8JETZuURZSydNlzKgx0=; b=D+UGEBGoCDWrsejENwb/HLpDHN2KM+6BgMa0eTJhS0CI0xWzNSrGwYgMVlj2MX732/ VEJadSmB1TDSq+xQV7AGNLyLpSpNIDZ9v15eFXNJqUKtUjTmK4Yys+cdN/+seGsqgMbJ duguXOCYQeVoQAkSJw6QOvvwcCq06gp0J+m6IYOIYcrOW5dSR2a0vPuXxTDqg/Adsitr f2+pJouJXk3lV9mWAvBOIWpHGLur5DqFkkQn4tXvJM9ceQNky9YxG0B1gGwCOo/5PVDw muNX4RRHwPi2NoWzJPRyzUhduIy/pk+2ZqN+koznp5qege4gIDqzsgbSMNXyaRMUG7y9 4hoA==; 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=1775417266; x=1776022066; 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=8fw8vfZ6qJPe2J+FOZu4jI1IHpbaoUcobm9l9o+ZqG4=; b=CeNpNZI7L4X3YJcf48qahh4GFbs/YbqI4I3tBLFnN8G1Yesqz66X0MncsYB6wiyg58 idoHyARB844Y3rhiV3EnVgk8E3bgoIMP2ZLSmSD1QAzjb6Q2suw0iY65T3oFtUJEAKba vKhiwUCCiqtMHxsT/93GDDt61yAU9Vwlbo8oHDXSVAWEW0B8N7XE4aOjuSEoUT6RHA7m F204sbV2Rf0f0tNzDfCYM+KM8fe12Nf0YxshjAYKdluVy05GePK2LyK1t/lxugbr/ILS EOhZgEXa3L0xf0DRaOBJhzzYFn4A4eimLwWGqyD71yYF8teyAPn4zucZsS0jIsfLu/YI siow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775417266; x=1776022066; 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=8fw8vfZ6qJPe2J+FOZu4jI1IHpbaoUcobm9l9o+ZqG4=; b=FjBwHEfPuu+y7x2hqK57EOXHh5RocqP6XBw7SbBMPypjScfkbiMYD+AFpbCHdyhFjl tqgsehzF+Oij5OOpUEL0sVw7306O6WBwwGecU8rbxk4Py+gSrvS4G8Ku5FRPXNfzKclO yFyfyarz3zdeUlIwWlbTkqDaZUw/qJz20f/nMKxgyE87M77gyUuT3twYxQSE/tfPaGK2 GHIGfgRvDKXbRyZuFQutxGY3q4574dzd4UXDX5W3gKlr7jrd62FZjh1XiuNnogVwtA+x BwNJ9qk6/zznu4zIzeigwDJHftjXbC10uURZGCY5CpXYzxQtBPmsYgc4mafNDATiAi6y Gvwg== X-Forwarded-Encrypted: i=1; AJvYcCWTqnq0XbrF4G5xh71sqmKiQ5U+tZhKp4s1zV/qHkJPiRY17m8FXCiLYaJb67fx7Tghw9PSccHm5s0z5ESq@lists.postgresql.org X-Gm-Message-State: AOJu0Yx+cRsycrKxqcVvYuVSTvAKW2oxqaCvu7TKvKnsxdxlEEho5XyY 88jh+p/JlA6xpPrzjvJu8d/7iBFXfB5vJSs1hbKvOTyNWzgDHiLkP9hzvPN1z8SJFUj4NrkToKT AxfrxtG3vFn3+3ANygDCrpu7j+A8HvEY= X-Gm-Gg: AeBDievAblBX4PBgCet8b2rmSedyg7ftkPovS0Oy0q7rYZCVpSpajZftxV9MuS29BQU GgCiCK1Y6eG2RFEGe04mgWyfloqVvnJ4rFCL9uRQfJYQrLwWikmUA2XH/3vqNjUr87sNETwBhss mpKW9gEVdVkc3SSK0rsWnnuadoqzmEPj+FzxpETUzDKu0496+7WtfHCQprujsia1jcmfwVoge68 Av4jAOg5EHOB1SLVruG91yk/0/9a4qxEK7jPTpk+KE6Sv4Zp8IF/kkukkLY6sxI0o/V+Jsu7uvv sbGAc1B2EmNzypWVLCNC0Ysu6cFByARLOl2O3EQ65Q== X-Received: by 2002:a17:907:60cb:b0:b9c:6e68:c19c with SMTP id a640c23a62f3a-b9c6e68c265mr436896866b.52.1775417266007; Sun, 05 Apr 2026 12:27:46 -0700 (PDT) MIME-Version: 1.0 References: <064E214D-D86F-4917-A0B6-67EAD6BCB24A@yandex-team.ru> <99f3524c-6aee-4fe2-8f3f-fcf0b67642c2@uni-muenster.de> <7e8c913b-1bfb-41f1-b5db-c29e2af48daa@uni-muenster.de> <56F9A892-B3C8-4479-8FA8-3E868CDFF2FC@yandex-team.ru> <76e0edf2-4be3-458a-86e4-35b9dd836f31@uni-muenster.de> In-Reply-To: <76e0edf2-4be3-458a-86e4-35b9dd836f31@uni-muenster.de> From: warda Bibi Date: Mon, 6 Apr 2026 00:27:33 +0500 X-Gm-Features: AQROBzCH7xGjwCANSgnDbi9p_rfmhtKA8EOOm04Wv4G3k3h8Jgc3tJ2LHt_pPr4 Message-ID: Subject: Re: Additional message in pg_terminate_backend To: Jim Jones Cc: Roman Khapov , Andrey Borodin , Kirill Reshke , Daniel Gustafsson , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000782ba5064ebb8bdf" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000782ba5064ebb8bdf Content-Type: text/plain; charset="UTF-8" Hi all, Thank you for the continued work on this patch. Prafulla Ranadive and I reviewed this patch through the patch review workshop. Overall, we find that the proposed feature is useful. We have reviewed all five versions and have the following observations. We agree with Jim's point of view that the v3 approach is better. v5 introduced separate _msg overloads (OID 8223 for pg_cancel_backend_msg, OID 8222 for pg_terminate_backend_msg), which adds catalog bloat and forces callers to use a different function name: > +{ oid => '8223', descr => 'cancel a server process\' current query', > proname => 'pg_cancel_backend', provolatile => 'v', prorettype => 'bool', > proargtypes => 'int4 text', prosrc => 'pg_cancel_backend_msg' }, > +{ oid => '8222', descr => 'terminate a server process', > proname => 'pg_terminate_backend', provolatile => 'v', prorettype => 'bool', > proargtypes => 'int4 int8 text', proargnames => '{pid,timeout,message}', > prosrc => 'pg_terminate_backend_msg' }, V3 keeps one OID per function and stays backward-compatible. v6 restores the v3 approach. --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -6727,19 +6727,14 @@ { oid => '2171', descr => 'cancel a server process\' current query', proname => 'pg_cancel_backend', provolatile => 'v', prorettype => 'bool', - proargtypes => 'int4', prosrc => 'pg_cancel_backend' }, -{ oid => '8223', descr => 'cancel a server process\' current query', - proname => 'pg_cancel_backend', provolatile => 'v', prorettype => 'bool', - proargtypes => 'int4 text', prosrc => 'pg_cancel_backend_msg' }, + proargtypes => 'int4 text', proargnames => '{pid,message}', + proargdefaults => '{""}'. + prosrc => 'pg_cancel_backend' }, { oid => '2096', descr => 'terminate a server process', - proname => 'pg_terminate_backend', provolatile => 'v', prorettype => 'bool', - proargtypes => 'int4 int8', proargnames => '{pid,timeout}', - proargdefaults => '{0}', - prosrc => 'pg_terminate_backend' }, -{ oid => '8222', descr => 'terminate a server process', proname => 'pg_terminate_backend', provolatile => 'v', prorettype => 'bool', proargtypes => 'int4 int8 text', proargnames => '{pid,timeout,message}', - prosrc => 'pg_terminate_backend_msg' }, + proargdefaults => '{0,""}', + prosrc => 'pg_terminate_backend' }, --- a/src/backend/catalog/system_functions.sql +++ b/src/backend/catalog/system_functions.sql @@ -378,6 +378,16 @@ BEGIN ATOMIC END; +CREATE OR REPLACE FUNCTION + pg_cancel_backend(pid integer, message text DEFAULT '') + RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_cancel_backend' + PARALLEL SAFE; + +CREATE OR REPLACE FUNCTION + pg_terminate_backend(pid integer, timeout int8 DEFAULT 0, message text DEFAULT '') + RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_terminate_backend' + PARALLEL SAFE; + The current approach scans all MaxBackends slots by PID twice. Since pg_signal_backend() already calls BackendPidGetProc(pid) and has the PGPROC* in hand, the PGPROC index into allProcs[ ] is the ProcNumber, which is also the direct index into BackendMsgSlots[]. So v6 changes the signature to BackendMsgSet(ProcNumber procno, ...) and the call in pg_signal_backend() passes GetNumberFromPGProc(proc), making the lookup O(1). -int BackendMsgSet(pid_t pid, const char *msg) +int BackendMsgSet(ProcNumber procno, const char *msg) { BackendMsgSlot *slot; int len; @@ -94,35 +94,26 @@ int BackendMsgSet(pid_t pid, const char *msg) if (msg == NULL || msg[0] == '\0') return 0; - for (int i = 0; i < MaxBackends; ++i) - { - slot = &BackendMsgSlots[i]; - - if (slot->pid == 0 || slot->pid != pid) - continue; - - SpinLockAcquire(&slot->lock); - - if (slot->pid != pid) - { - SpinLockRelease(&slot->lock); - break; - } + slot = &BackendMsgSlots[procno]; Also, fixed a stale file-header path in backend_msg.c: --- a/src/backend/utils/misc/backend_msg.c +++ b/src/backend/utils/misc/backend_msg.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * src/include/utils/misc/backend_msg.c + * src/backend/utils/misc/backend_msg.c Removed dead NULL checks on msg in pg_cancel_backend_msg() and pg_terminate_backend_msg() because text_to_cstring() never returns NULL. pid = PG_GETARG_INT32(0); msg = text_to_cstring(PG_GETARG_TEXT_PP(1)); - if (msg == NULL) { - PG_RETURN_BOOL(false); - } Furthermore, the else before the fallback ereport(FATAL) in the terminate path is missing in v5. Without the else, the fallback ereport is unreachable when BackendMsgIsSet() is true because ereport(FATAL) never returns, but it misleads readers into thinking the generic message is always emitted. Adding an else is also consistent with the pg_cancel approach. v6 adds else to make the intent explicit. - ereport(FATAL, - (errcode(ERRCODE_ADMIN_SHUTDOWN), - errmsg("terminating connection due to administrator command"))); + else + ereport(FATAL, + (errcode(ERRCODE_ADMIN_SHUTDOWN), + errmsg("terminating connection due to administrator command"))); } } The _internal helper functions (pg_cancel_backend_internal, pg_terminate_backend_internal) each have only one call site. What is the intent behind keeping them separate, or can they be inlined directly into pg_cancel_backend() and pg_terminate_backend()? Andrey noted that: > We have a race condition if many backends cancel same backend. > Won't they mess each other's reason? The spinlock in BackendMsgSet protects the write, but there is no atomicity between writing the slot and delivering the signal. Another backend can overwrite the slot between one writer's write and the target reading it. Would it be valuable to define the behavior explicitly, for example last-writer-wins, or document the limitation? Andrey also raised this about translation: > Keep in mind that Postgres literals are translated into many languages. > So text ought to be clear enough for translators to build a sentence > that precedes termination reason. The current pattern: > errmsg("terminating connection due to administrator command: %s", msg) The colon-append pattern breaks in languages where the reason clause is structured differently. Any suggestions on how to approach this, or how similar cases are handled elsewhere in the codebase? Also, parallel workers receive the generic message as they hit the IsBackgroundWorker branch in ProcessInterrupts(), which bypasses BackendMsgGet(). This is fine since parallel workers are ephemeral, but should it be documented in the docs? Patch attached. -- Best Wishes, Warda Bibi --000000000000782ba5064ebb8bdf Content-Type: application/octet-stream; name="v6-0001-message-in-pg_terminate_backend-and-pg_cancel_backend.patch" Content-Disposition: attachment; filename="v6-0001-message-in-pg_terminate_backend-and-pg_cancel_backend.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnm4zzeu0 RnJvbSAzZTE2NmIwZmIwY2M5ODAwYTlhODk4MjQwYWRiNDc1MGU0YzZjNzA1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBXYXJkYSBCaWJpIDx3YXJkYWJpYmkyMjFAZ21haWwuY29tPgpE YXRlOiBTYXQsIDQgQXByIDIwMjYgMjA6MTI6NTggKzA1MDAKU3ViamVjdDogW1BBVENIIHY2XSBt ZXNzYWdlIGluIHBnX3Rlcm1pbmF0ZV9iYWNrZW5kIGFuZCBwZ19jYW5jZWxfYmFja2VuZAogClNv bWV0aW1lcyBpdCBpcyB1c2VmdWwgdG8gdGVybWluYXRlIG9yIGNhbmNlbCBhIGJhY2tlbmQgd2l0 aCBhbgphZGRpdGlvbmFsIG1lc3NhZ2UgZXhwbGFpbmluZyB0aGUgcmVhc29uLCBzbyB0aGUgY2xp ZW50IHNlZXMgc29tZXRoaW5nCm1vcmUgaW5mb3JtYXRpdmUgdGhhbiB0aGUgZ2VuZXJpYyBlcnJv ciB0ZXh0LgoKVGhpcyBwYXRjaCBhZGRzIGFuIG9wdGlvbmFsIG1lc3NhZ2UgYXJndW1lbnQgdG8g cGdfdGVybWluYXRlX2JhY2tlbmQoKQphbmQgcGdfY2FuY2VsX2JhY2tlbmQoKSwgZm9sZGVkIGlu dG8gdGhlIGV4aXN0aW5nIGZ1bmN0aW9ucyB2aWEgREVGQVVMVApwYXJhbWV0ZXJzIHNvIG5vIG5l dyBjYXRhbG9nIGVudHJpZXMgYXJlIG5lZWRlZDoKCiAgcGdfY2FuY2VsX2JhY2tlbmQocGlkIGlu dGVnZXIsIG1lc3NhZ2UgdGV4dCBERUZBVUxUICcnKQogIHBnX3Rlcm1pbmF0ZV9iYWNrZW5kKHBp ZCBpbnRlZ2VyLCB0aW1lb3V0IGludDggREVGQVVMVCAwLCBtZXNzYWdlIHRleHQgREVGQVVMVCAn JykKClRoZSBtZXNzYWdlIGlzIHN0b3JlZCBpbiBhIGRlZGljYXRlZCBzaGFyZWQgbWVtb3J5IHJl Z2lvbgooQmFja2VuZE1zZ1Nsb3RzLCBvbmUgc2xvdCBwZXIgTWF4QmFja2VuZHMgaW5kZXhlZCBi eSBQcm9jTnVtYmVyKSBhbmQKcmVhZCBieSB0aGUgdGFyZ2V0IGJhY2tlbmQgaW4gUHJvY2Vzc0lu dGVycnVwdHMoKSBiZWZvcmUgdGhlCmVyZXBvcnQoRkFUQUwvRVJST1IpLiBVbmljb2RlLXNhZmUg dHJ1bmNhdGlvbiBpcyBhcHBsaWVkIHZpYQpwZ19tYmNsaXBsZW4oKSBpZiB0aGUgbWVzc2FnZSBl eGNlZWRzIEJBQ0tFTkRfTVNHX01BWF9MRU4gYnl0ZXMsIHdpdGgKYSBOT1RJQ0UgZW1pdHRlZCB0 byB0aGUgY2FsbGVyLgoKQXV0aG9yOiBEYW5pZWwgR3VzdGFmc3NvbiA8ZGFuaWVsQHllc3FsLnNl PgpBdXRob3I6IFJvbWFuIEtoYXBvdiA8ci5raGFwb3ZAeWEucnU+ClJldmlld2VkLWJ5OiBLaXJp bGwgUmVzaGtlIDxyZXNoa2VraXJpbGxAZ21haWwuY29tPgpSZXZpZXdlZC1ieTogSmltIEpvbmVz IDxqaW0uam9uZXNAdW5pLW11ZW5zdGVyLmRlPgpSZXZpZXdlZC1ieTogQW5kcmV5IEJvcm9kaW4g PHg0bW1tQHlhbmRleC10ZWFtLnJ1PgotLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1 bmN0aW9ucy5zcWwgfCAxMCArKysrKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NpZ25hbGZ1 bmNzLmMgICAgfCAzMiArKy0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdy ZXMuYyAgICAgICAgICAgICAgfCAgOCArKy0tLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9iYWNr ZW5kX21zZy5jICAgICB8IDQxICsrKysrKysrKy0tLS0tLS0tLS0tLS0tLQogc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICB8IDE1ICsrKy0tLS0tLQogc3JjL2luY2x1ZGUv dXRpbHMvYmFja2VuZF9tc2cuaCAgICAgICAgICB8ICA0ICsrLQogNiBmaWxlcyBjaGFuZ2VkLCA0 MSBpbnNlcnRpb25zKCspLCA2OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0 ZW1fZnVuY3Rpb25zLnNxbAppbmRleCA2OTY5OWY4ODMwYS4uN2RiYWQ2YTI3OWIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9ucy5zcWwKKysrIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVuY3Rpb25zLnNxbApAQCAtMzc4LDYgKzM3OCwxNiBAQCBC RUdJTiBBVE9NSUMKIEVORDsKIAogCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTgorICBwZ19j YW5jZWxfYmFja2VuZChwaWQgaW50ZWdlciwgbWVzc2FnZSB0ZXh0IERFRkFVTFQgJycpCisgIFJF VFVSTlMgYm9vbGVhbiBTVFJJQ1QgVk9MQVRJTEUgTEFOR1VBR0UgSU5URVJOQUwgQVMgJ3BnX2Nh bmNlbF9iYWNrZW5kJworICBQQVJBTExFTCBTQUZFOworCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5D VElPTgorICBwZ190ZXJtaW5hdGVfYmFja2VuZChwaWQgaW50ZWdlciwgdGltZW91dCBpbnQ4IERF RkFVTFQgMCwgbWVzc2FnZSB0ZXh0IERFRkFVTFQgJycpCisgIFJFVFVSTlMgYm9vbGVhbiBTVFJJ Q1QgVk9MQVRJTEUgTEFOR1VBR0UgSU5URVJOQUwgQVMgJ3BnX3Rlcm1pbmF0ZV9iYWNrZW5kJwor ICBQQVJBTExFTCBTQUZFOworCiAtLQogLS0gVGhlIGRlZmF1bHQgcGVybWlzc2lvbnMgZm9yIGZ1 bmN0aW9ucyBtZWFuIHRoYXQgYW55b25lIGNhbiBleGVjdXRlIHRoZW0uCiAtLSBBIG51bWJlciBv ZiBmdW5jdGlvbnMgc2hvdWxkbid0IGJlIGV4ZWN1dGFibGUgYnkganVzdCBhbnlvbmUsIGJ1dCBy YXRoZXIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NpZ25hbGZ1bmNzLmMg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaWduYWxmdW5jcy5jCmluZGV4IDI1MDFlYzU4NjU4 Li5lYWJiMzQxYTJiYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2lnbmFs ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaWduYWxmdW5jcy5jCkBAIC0x MTIsNyArMTEyLDcgQEAgcGdfc2lnbmFsX2JhY2tlbmQoaW50IHBpZCwgaW50IHNpZywgY29uc3Qg Y2hhciAqbXNnKQogCiAJaWYgKG1zZyAhPSBOVUxMICYmIG1zZ1swXSAhPSAnXDAnKQogCXsKLQkJ aW50CQlyID0gQmFja2VuZE1zZ1NldChwaWQsIG1zZyk7CisJCWludAkJciA9IEJhY2tlbmRNc2dT ZXQoR2V0TnVtYmVyRnJvbVBHUHJvYyhwcm9jKSwgbXNnKTsKIAogCQlpZiAociAhPSAtMSAmJiBy ICE9IHN0cmxlbihtc2cpKQogCQkJZXJlcG9ydChOT1RJQ0UsCkBAIC0xNzIsMjMgKzE3MiwxMSBA QCBwZ19jYW5jZWxfYmFja2VuZF9pbnRlcm5hbChwaWRfdCBwaWQsIGNvbnN0IGNoYXIgKm1zZykK IERhdHVtIHBnX2NhbmNlbF9iYWNrZW5kKFBHX0ZVTkNUSU9OX0FSR1MpCiB7CiAJaW50CQlwaWQ7 Ci0KLQlwaWQgPSBQR19HRVRBUkdfSU5UMzIoMCk7Ci0KLQlyZXR1cm4gcGdfY2FuY2VsX2JhY2tl bmRfaW50ZXJuYWwocGlkLCBOVUxMKTsKLX0KLQotRGF0dW0gcGdfY2FuY2VsX2JhY2tlbmRfbXNn KFBHX0ZVTkNUSU9OX0FSR1MpCi17Ci0JaW50CQlwaWQ7Ci0JY2hhcgkqbXNnOworCWNoYXIgICAq bXNnOwogCURhdHVtCXJlc3VsdDsKIAogCXBpZCA9IFBHX0dFVEFSR19JTlQzMigwKTsKIAltc2cg PSB0ZXh0X3RvX2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAoMSkpOwotCWlmIChtc2cgPT0gTlVM TCkgewotCQlQR19SRVRVUk5fQk9PTChmYWxzZSk7Ci0JfQogCiAJcmVzdWx0ID0gcGdfY2FuY2Vs X2JhY2tlbmRfaW50ZXJuYWwocGlkLCBtc2cpOwogCkBAIC0zMTMsMjYgKzMwMSwxMiBAQCBEYXR1 bSBwZ190ZXJtaW5hdGVfYmFja2VuZChQR19GVU5DVElPTl9BUkdTKQogewogCWludAkJcGlkOwog CWludAkJdGltZW91dF9tczsKLQotCXBpZCA9IFBHX0dFVEFSR19JTlQzMigwKTsKLQl0aW1lb3V0 X21zID0gUEdfR0VUQVJHX0lOVDY0KDEpOwotCi0JcmV0dXJuIHBnX3Rlcm1pbmF0ZV9iYWNrZW5k X2ludGVybmFsKHBpZCwgdGltZW91dF9tcywgTlVMTCk7Ci19Ci0KLURhdHVtIHBnX3Rlcm1pbmF0 ZV9iYWNrZW5kX21zZyhQR19GVU5DVElPTl9BUkdTKQotewotCWludAkJcGlkOwotCWludAkJdGlt ZW91dF9tczsKLQljaGFyCSptc2c7CisJY2hhciAgICptc2c7CiAJRGF0dW0JcmVzdWx0OwogCiAJ cGlkID0gUEdfR0VUQVJHX0lOVDMyKDApOwogCXRpbWVvdXRfbXMgPSBQR19HRVRBUkdfSU5UNjQo MSk7CiAJbXNnID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDIpKTsKLQlpZiAo bXNnID09IE5VTEwpIHsKLQkJUEdfUkVUVVJOX0JPT0woZmFsc2UpOwotCX0KIAogCXJlc3VsdCA9 IHBnX3Rlcm1pbmF0ZV9iYWNrZW5kX2ludGVybmFsKHBpZCwgdGltZW91dF9tcywgbXNnKTsKIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNv cC9wb3N0Z3Jlcy5jCmluZGV4IDkyMDQwZDc0OGY0Li4yNWQyODU3ZjY5ZiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdy ZXMuYwpAQCAtMzQwMiwxMCArMzQwMiwxMCBAQCBQcm9jZXNzSW50ZXJydXB0cyh2b2lkKQogCQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9BRE1JTl9TSFVURE9XTiksCiAJCQkJCQllcnJtc2coInRlcm1p bmF0aW5nIGNvbm5lY3Rpb24gZHVlIHRvIGFkbWluaXN0cmF0b3IgY29tbWFuZDogJXMiLCBtc2cp KSk7CiAJCQl9Ci0KLQkJCWVyZXBvcnQoRkFUQUwsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfQURN SU5fU0hVVERPV04pLAotCQkJCQkgZXJybXNnKCJ0ZXJtaW5hdGluZyBjb25uZWN0aW9uIGR1ZSB0 byBhZG1pbmlzdHJhdG9yIGNvbW1hbmQiKSkpOworCQkJZWxzZQorCQkJCWVyZXBvcnQoRkFUQUws CisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0FETUlOX1NIVVRET1dOKSwKKwkJCQkJCSBlcnJtc2co InRlcm1pbmF0aW5nIGNvbm5lY3Rpb24gZHVlIHRvIGFkbWluaXN0cmF0b3IgY29tbWFuZCIpKSk7 CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvYmFja2VuZF9t c2cuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvYmFja2VuZF9tc2cuYwppbmRleCAzNGQ0NDA2 OTA1Ni4uNTYwYWVlMTQ4YmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvYmFj a2VuZF9tc2cuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2JhY2tlbmRfbXNnLmMKQEAg LTcsNyArNyw3IEBACiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg MTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCiAgKgotICogc3Jj L2luY2x1ZGUvdXRpbHMvbWlzYy9iYWNrZW5kX21zZy5jCisgKiBzcmMvYmFja2VuZC91dGlscy9t aXNjL2JhY2tlbmRfbXNnLmMKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KQEAgLTg2LDcgKzg2LDcg QEAgdm9pZCBCYWNrZW5kTXNnSW5pdChpbnQgaWQpCiAJb25fc2htZW1fZXhpdChiYWNrZW5kX21z Z19zbG90X2NsZWFuLCBJbnQzMkdldERhdHVtKDApIC8qIG5vdCB1c2VkICovKTsKIH0KIAotaW50 IEJhY2tlbmRNc2dTZXQocGlkX3QgcGlkLCBjb25zdCBjaGFyICptc2cpCitpbnQgQmFja2VuZE1z Z1NldChQcm9jTnVtYmVyIHByb2NubywgY29uc3QgY2hhciAqbXNnKQogewogCUJhY2tlbmRNc2dT bG90CQkqc2xvdDsKIAlpbnQJCQkJCWxlbjsKQEAgLTk0LDM1ICs5NCwyNiBAQCBpbnQgQmFja2Vu ZE1zZ1NldChwaWRfdCBwaWQsIGNvbnN0IGNoYXIgKm1zZykKIAlpZiAobXNnID09IE5VTEwgfHwg bXNnWzBdID09ICdcMCcpCiAJCXJldHVybiAwOwogCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBNYXhC YWNrZW5kczsgKytpKQotCXsKLQkJc2xvdCA9ICZCYWNrZW5kTXNnU2xvdHNbaV07Ci0KLQkJaWYg KHNsb3QtPnBpZCA9PSAwIHx8IHNsb3QtPnBpZCAhPSBwaWQpCi0JCQljb250aW51ZTsKLQotCQlT cGluTG9ja0FjcXVpcmUoJnNsb3QtPmxvY2spOwotCi0JCWlmIChzbG90LT5waWQgIT0gcGlkKQot CQl7Ci0JCQlTcGluTG9ja1JlbGVhc2UoJnNsb3QtPmxvY2spOwotCQkJYnJlYWs7Ci0JCX0KKwlz bG90ID0gJkJhY2tlbmRNc2dTbG90c1twcm9jbm9dOwogCi0JCWxlbiA9IHBnX21iY2xpcGxlbiht c2csIHN0cmxlbihtc2cpLCBzaXplb2Yoc2xvdC0+bXNnKSAtIDEpOwotCQltZW1jcHkoc2xvdC0+ bXNnLCBtc2csIGxlbik7Ci0JCXNsb3QtPm1zZ1tsZW5dID0gJ1wwJzsKKwlTcGluTG9ja0FjcXVp cmUoJnNsb3QtPmxvY2spOwogCisJaWYgKHNsb3QtPnBpZCA9PSAwKQorCXsKIAkJU3BpbkxvY2tS ZWxlYXNlKCZzbG90LT5sb2NrKTsKLQotCQlyZXR1cm4gbGVuOworCQllcmVwb3J0KExPRywKKwkJ CQkoZXJybXNnKCJjYW4ndCBzZXQgbWVzc2FnZSBmb3IgbWlzc2luZyBiYWNrZW5kLCByZXF1ZXN0 ZWQgYnkgJWxkIiwKKwkJCQkJKGxvbmcpIE15UHJvY1BpZCkpKTsKKwkJcmV0dXJuIC0xOwogCX0K IAotCWVyZXBvcnQoTE9HLAotCQkJKGVycm1zZygiY2FuJ3Qgc2V0IG1lc3NhZ2UgZm9yIG1pc3Np bmcgYmFja2VuZCAlbGQsIHJlcXVlc3RlZCBieSAlbGQiLAotCQkJCShsb25nKSBwaWQsIChsb25n KSBNeVByb2NQaWQpKSk7CisJbGVuID0gcGdfbWJjbGlwbGVuKG1zZywgc3RybGVuKG1zZyksIHNp emVvZihzbG90LT5tc2cpIC0gMSk7CisJbWVtY3B5KHNsb3QtPm1zZywgbXNnLCBsZW4pOworCXNs b3QtPm1zZ1tsZW5dID0gJ1wwJzsKIAotCXJldHVybiAtMTsKKwlTcGluTG9ja1JlbGVhc2UoJnNs b3QtPmxvY2spOworCisJcmV0dXJuIGxlbjsKIH0KIAogaW50IEJhY2tlbmRNc2dHZXQoY2hhciAq YnVmLCBpbnQgbWF4X2xlbikKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJv Yy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDI3MzJkY2I2ODY3 Li4zODMzZmM0YmEyYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRh dAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC02NzI3LDE5ICs2NzI3 LDE0IEBACiAKIHsgb2lkID0+ICcyMTcxJywgZGVzY3IgPT4gJ2NhbmNlbCBhIHNlcnZlciBwcm9j ZXNzXCcgY3VycmVudCBxdWVyeScsCiAgIHByb25hbWUgPT4gJ3BnX2NhbmNlbF9iYWNrZW5kJywg cHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9yZXR0eXBlID0+ICdib29sJywKLSAgcHJvYXJndHlwZXMg PT4gJ2ludDQnLCBwcm9zcmMgPT4gJ3BnX2NhbmNlbF9iYWNrZW5kJyB9LAoteyBvaWQgPT4gJzgy MjMnLCBkZXNjciA9PiAnY2FuY2VsIGEgc2VydmVyIHByb2Nlc3NcJyBjdXJyZW50IHF1ZXJ5JywK LSAgcHJvbmFtZSA9PiAncGdfY2FuY2VsX2JhY2tlbmQnLCBwcm92b2xhdGlsZSA9PiAndicsIHBy b3JldHR5cGUgPT4gJ2Jvb2wnLAotICBwcm9hcmd0eXBlcyA9PiAnaW50NCB0ZXh0JywgcHJvc3Jj ID0+ICdwZ19jYW5jZWxfYmFja2VuZF9tc2cnIH0sCisgIHByb2FyZ3R5cGVzID0+ICdpbnQ0IHRl eHQnLCBwcm9hcmduYW1lcyA9PiAne3BpZCxtZXNzYWdlfScsCisgIHByb2FyZ2RlZmF1bHRzID0+ ICd7IiJ9JywKKyAgcHJvc3JjID0+ICdwZ19jYW5jZWxfYmFja2VuZCcgfSwKIHsgb2lkID0+ICcy MDk2JywgZGVzY3IgPT4gJ3Rlcm1pbmF0ZSBhIHNlcnZlciBwcm9jZXNzJywKLSAgcHJvbmFtZSA9 PiAncGdfdGVybWluYXRlX2JhY2tlbmQnLCBwcm92b2xhdGlsZSA9PiAndicsIHByb3JldHR5cGUg PT4gJ2Jvb2wnLAotICBwcm9hcmd0eXBlcyA9PiAnaW50NCBpbnQ4JywgcHJvYXJnbmFtZXMgPT4g J3twaWQsdGltZW91dH0nLAotICBwcm9hcmdkZWZhdWx0cyA9PiAnezB9JywKLSAgcHJvc3JjID0+ ICdwZ190ZXJtaW5hdGVfYmFja2VuZCcgfSwKLXsgb2lkID0+ICc4MjIyJywgZGVzY3IgPT4gJ3Rl cm1pbmF0ZSBhIHNlcnZlciBwcm9jZXNzJywKICAgcHJvbmFtZSA9PiAncGdfdGVybWluYXRlX2Jh Y2tlbmQnLCBwcm92b2xhdGlsZSA9PiAndicsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLAogICBwcm9h cmd0eXBlcyA9PiAnaW50NCBpbnQ4IHRleHQnLCBwcm9hcmduYW1lcyA9PiAne3BpZCx0aW1lb3V0 LG1lc3NhZ2V9JywKLSAgcHJvc3JjID0+ICdwZ190ZXJtaW5hdGVfYmFja2VuZF9tc2cnIH0sCisg IHByb2FyZ2RlZmF1bHRzID0+ICd7MCwiIn0nLAorICBwcm9zcmMgPT4gJ3BnX3Rlcm1pbmF0ZV9i YWNrZW5kJyB9LAogeyBvaWQgPT4gJzIxNzInLCBkZXNjciA9PiAncHJlcGFyZSBmb3IgdGFraW5n IGFuIG9ubGluZSBiYWNrdXAnLAogICBwcm9uYW1lID0+ICdwZ19iYWNrdXBfc3RhcnQnLCBwcm92 b2xhdGlsZSA9PiAndicsIHByb3BhcmFsbGVsID0+ICdyJywKICAgcHJvcmV0dHlwZSA9PiAncGdf bHNuJywgcHJvYXJndHlwZXMgPT4gJ3RleHQgYm9vbCcsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS91dGlscy9iYWNrZW5kX21zZy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYmFja2VuZF9tc2cuaApp bmRleCA3ZTUzYzU5ODQ1Zi4uNWNjYWQ4M2FmMTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0 aWxzL2JhY2tlbmRfbXNnLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvYmFja2VuZF9tc2cuaApA QCAtMTUsMTIgKzE1LDE0IEBACiAjaWZuZGVmIEJBQ0tFTkRfTVNHX0gKICNkZWZpbmUgQkFDS0VO RF9NU0dfSAogCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCisKICNkZWZpbmUgQkFDS0VORF9N U0dfTUFYX0xFTiAxMjgKIAogZXh0ZXJuIHZvaWQgQmFja2VuZE1zZ1NobWVtSW5pdCh2b2lkKTsK IGV4dGVybiBTaXplIEJhY2tlbmRNc2dTaG1lbVNpemUodm9pZCk7CiBleHRlcm4gdm9pZCBCYWNr ZW5kTXNnSW5pdChpbnQgaWQpOwotZXh0ZXJuIGludCBCYWNrZW5kTXNnU2V0KHBpZF90IHBpZCwg Y29uc3QgY2hhciAqbXNnKTsKK2V4dGVybiBpbnQgQmFja2VuZE1zZ1NldChQcm9jTnVtYmVyIHBy b2NubywgY29uc3QgY2hhciAqbXNnKTsKIGV4dGVybiBpbnQgQmFja2VuZE1zZ0dldChjaGFyICpi dWYsIGludCBtYXhfbGVuKTsKIGV4dGVybiBib29sIEJhY2tlbmRNc2dJc1NldCh2b2lkKTsKIAot LSAKMi41MS4wCgo= --000000000000782ba5064ebb8bdf--