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 1wAP7O-002Lta-2c for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 09:22:39 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wAP7N-006L9d-0X for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 09:22:37 +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 1wAP7M-006L9U-1s for pgsql-hackers@lists.postgresql.org; Wed, 08 Apr 2026 09:22:37 +0000 Received: from mail-dy1-x1336.google.com ([2607:f8b0:4864:20::1336]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wAP7K-00000001C6a-18x2 for pgsql-hackers@lists.postgresql.org; Wed, 08 Apr 2026 09:22:36 +0000 Received: by mail-dy1-x1336.google.com with SMTP id 5a478bee46e88-2cc43ca447aso211734eec.1 for ; Wed, 08 Apr 2026 02:22:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775640153; cv=none; d=google.com; s=arc-20240605; b=S/pRER3J7nxyae7tceo6FwKVh6Q5OH0GQLTY2wC8biZguFkAdMPXuppvfj/3MrVy/F 8uGRVYx+F0tKobBuC+6P5iYjITyLuyE6QESEzzmLRYwdQozoG6u/gvqbJSJD+DZzEibq BoxYHIWaqwPHoUMZkEc6JHpj0Ld3eVz4b007Y91eS8UTGhpoPGJj5YVUljKwRyC40aoL +HcxW+v7ZThGYGmktX63UspndDzy2jKOQD46L+myGiQN4p13cQF1qkqdcoy+7Mj5KUq9 Za+izitCchlSJkam1KLUM2eq25TOtRnFftwGRDm5k64TRwR5lWf9JnTYtoviA8Oyvc9F +Gtw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=OR5mcR2hnLIKnc4DNHV+X0UpGo4SD03mQ9MdNfTOR7o=; fh=dxJXJbLzq9Nah1LUdsj4QTuQ3JoDScd0wp1YHY64NXM=; b=iXznsLFqNxfLWWEn/5ynVPtAJJs4XUN/5B3vC/vVLcs2KfBTIUmq7OHeKgN4Kv53Wt ATqaPFigeYN5p5zNGfhI+DJfCZ4Wb3l9l+J98HqqHVoK/O6euDTCnl33x05ymhh430gi xERXWUwjn7oPNMcUR2XCaGTKRqCtpedgQLdDXJi1rfqCQR8tc0Or1N6sIN4gJMyvC0dE 1xOaKXP0oHjt1ozZUXt8jHyO2+XmmmgfiKHITqwllDyoLJ0PCsP5ft1iH9l9k9MUn4fJ Bod7nSTdvVWuXdh6oR/QTUTAnWMwXyqOr9R8TIz1MCMS/V1526TXyf4ODEmIdR8Ryicf gHAw==; 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=1775640153; x=1776244953; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=OR5mcR2hnLIKnc4DNHV+X0UpGo4SD03mQ9MdNfTOR7o=; b=SeqUx2G3a88hZFxbU0seDWDLQlu0GrAsyLn39TqSgRf8MJxUDe6sDT/7GAwDNIHKCr o1g5xWyJY1OSyLG+8RZ5tUorqLmNUio4JCp/L50pORXYItI/dylUwJY8N6MwRk22TGU5 ZCOA9B8cpcL86EaWX6zW92FQcY+pGaCKymgLvaiifv33R0f8mBsqdRN0KG6stBt9+d5E ZqAyxsq+Xn0Vbm1yhE2cLV9OrDytishLZqQIwuooO4j8PA6ClbLtYpfQsDrANHlTjZJS LLgcFdqyEXmbAroFHKKnz/BSv/ptUGsfKZOSnGcWkM3CTxauaijND4dD1oqmmxfn/E+R BteQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775640153; x=1776244953; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=OR5mcR2hnLIKnc4DNHV+X0UpGo4SD03mQ9MdNfTOR7o=; b=TGwiMb5OXdKJNypDxkmOpc8tAyzYLBwm0X+SErogxt68Bf/noFY/8PLi8kuZiaVk5r V1d+pubErh4n6hK982mogouvsJOrskmAIkdlg/yKQrpkHrKel3FyP8ChhTtoruIaS3O1 Q3gsRfJ7tocSzY1h/lr2+Iqr71Qm7yjb99B+0XcxeZvY6KxYUKLA8sEO2uU43hoKLIzm aTpvuAC88LMcBOZ8Ekn1KhPPv7T0yAT0H2mYk4e1OBmjuq7aC9Jt8kRPO9vhUuX+hbJi r/GzQPvVxBGs1kPPt28r2CHbQrPlaN/9KJoiB9vic985yTnGNKCvzGZ1pwYRP+7y1ZTz lmEg== X-Gm-Message-State: AOJu0YwPl2G4sZnzO+xAE2F2O5PENAWtjI3sR9Pk7rOoax8/hyev2kNZ jQcbOAoU9r0xmX9Ul7nnecdMj9/ap98+llzaNMbGjiBbMlDNGctDRloUTUqjdcdg5p3DXoS/Sg5 SzagpcqKTMK1SeY5IHDuE7NgPg4K5nx4mSNAo X-Gm-Gg: AeBDiesCbu/AOi81UnPagZ8jI3b7X/kXlNOy9v/TK7yNYUOVsysOJCU5A+EUg8zZBE7 b1yp7q4uouz04swpkp8yDud1ZQBrLoM/U1evYA4nSEIECImy55jOCsC2raJP8LMO5Z+jPTAvEib Qmg9WZOou4j0jcTNQUssSlJ6KsSno8JjBWzY+7mJGooQT1X2GwZd659LqKc6l6/X+2X4beMn2HP bSw9vfl4TFdFYdvLV9jNb1fRVlhrMeuZ2lnkk8ihIClFkiCW3GohgE7spE3CwEPLKyJ568nP76I F6EYwvifnsajAj/YO5rirLY8LSmi41xzwxPDc4ms6dCMJ7JxckAvM4EdRUx4okW7 X-Received: by 2002:a05:7300:aa8d:b0:2cb:cc20:1771 with SMTP id 5a478bee46e88-2cbfdb8142amr4863663eec.7.1775640152803; Wed, 08 Apr 2026 02:22:32 -0700 (PDT) MIME-Version: 1.0 From: Thomas Munro Date: Wed, 8 Apr 2026 21:21:53 +1200 X-Gm-Features: AQROBzAkrKN9ZK4OdC7m5y6n9BbEuVG-meSdpdSEk2WG7slVpVwG51E3hYWwyas Message-ID: Subject: Refactoring DetermineSleepTime() To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000008f0d42064eef70b1" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008f0d42064eef70b1 Content-Type: text/plain; charset="UTF-8" Hi, DetermineSleepTime() came with background workers (commit da07a1e8). While working on I/O workers, which now also have time-scheduled postmaster duties to support io_worker_launch_interval, I wondered if it might be time to refactor it and make such things follow a standard pattern, including the much more ancient SIGKILL and the lockfile/socket stuff. Sketch patch attached. Something similar happened to walreceiver.c. --0000000000008f0d42064eef70b1 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Refactor-the-postmaster-s-periodic-job-scheduling.patch" Content-Disposition: attachment; filename="0001-Refactor-the-postmaster-s-periodic-job-scheduling.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnptt8l40 RnJvbSA1MzllYmI4ZDBmZjZhMDc3MWMyNjdlYTY0ZjU2NmU0MzNiYTMwNmI3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+ CkRhdGU6IE1vbiwgNiBBcHIgMjAyNiAyMDo1NDo1MyArMTIwMApTdWJqZWN0OiBbUEFUQ0ggMS8y XSBSZWZhY3RvciB0aGUgcG9zdG1hc3RlcidzIHBlcmlvZGljIGpvYiBzY2hlZHVsaW5nLgoKRGV0 ZXJtaW5lU2xlZXBUaW1lKCkgd2FzIGludHJvZHVjZWQgdG8gc3VwcG9ydCBiYWNrZ3JvdW5kIHdv cmtlcnMsIGFuZApieSBub3cgY29uc2lkZXJzIHRoZSBmb2xsb3dpbmcgcmVhc29ucyBmb3IgU2Vy dmVyTG9vcCgpIHRvIHdha2UgdXA6CgogKiBiZ3dvcmtlciByZXN0YXJ0cwogKiBJL08gd29ya2Vy IGxhdW5jaCBpbnRlcnZhbHMKICogU0lHS0lMTCB0aW1lb3V0IHJlYWNoZWQgZHVyaW5nIGltbWVk aWF0ZSBzaHV0ZG93bi9jcmFzaCByZXN0YXJ0CiAqIGxvY2sgZmlsZSBjaGVja3MKICogc29ja2V0 IHRvdWNoZXMKClRvIG1ha2UgaXQgZWFzaWVyIHRvIGZvbGxvdywgaGFybW9uaXplIHRoZSB1bml0 IG9mIHRpbWUga2VlcGluZyBhbmQgdGhlCmNvbnRyb2wgZmxvdy4KCkVhY2ggZHV0eSBoYXMgYW4g WFhYX3NjaGVkdWxlZF9hdCB2YXJpYWJsZSBvciBmdW5jdGlvbiBvZiB0eXBlClRpbWVzdGFtcFR6 LCB3aGljaCBjYW4gYmUgdGhlIHNwZWNpYWwgdmFsdWVzIFBNX1NDSEVEVUxFX0lNTUVESUFURUxZ IG9yClBNX1NDSEVEVUxFX05FVkVSLiAgRGV0ZXJtaW5lU2xlZXBUaW1lKCkgc2ltcGx5IGNvbXBh cmVzIHRoZW0gYW5kCnJldHVybnMgdGhlIGxvd2VzdCB0aW1lLgoKQXMgYSBzaWRlLWVmZmVjdCwg dGhlIGV4aXN0aW5nIFNJR0tJTEwsIGxvY2tmaWxlIGFuZCBzb2NrZXQgZmlsZXMgZHV0aWVzCmFy ZSBwZXJmb3JtZWQgd2l0aCBhY2N1cmF0ZSB0aW1pbmcuCi0tLQogc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9wb3N0bWFzdGVyLmMgfCAyNDcgKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQogMSBm aWxlIGNoYW5nZWQsIDEyNCBpbnNlcnRpb25zKCspLCAxMjMgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgYi9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwppbmRleCA2ZTBmNDFkMjY2MS4uZmEwMTg0MTA3YzIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCisrKyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC0zNjEsMTMgKzM2MSwyNCBAQCBzdGF0 aWMgUE1TdGF0ZSBwbVN0YXRlID0gUE1fSU5JVDsKICAqLwogc3RhdGljIGJvb2wgY29ubnNBbGxv d2VkID0gdHJ1ZTsKIAotLyogU3RhcnQgdGltZSBvZiBTSUdLSUxMIHRpbWVvdXQgZHVyaW5nIGlt bWVkaWF0ZSBzaHV0ZG93biBvciBjaGlsZCBjcmFzaCAqLwotLyogWmVybyBtZWFucyB0aW1lb3V0 IGlzIG5vdCBydW5uaW5nICovCi1zdGF0aWMgdGltZV90IEFib3J0U3RhcnRUaW1lID0gMDsKKy8q IFNwZWNpYWwgdmFsdWVzIGZvciBzY2hlZHVsaW5nIFBvc3RtYXN0ZXIgZHV0aWVzIGF0IGNlcnRh aW4gdGltZXMuICovCisjZGVmaW5lIFBNX1NDSEVEVUxFX05FVkVSCQkJCVRJTUVTVEFNUF9JTkZJ TklUWQorI2RlZmluZSBQTV9TQ0hFRFVMRV9JTU1FRElBVEVMWQkJCVRJTUVTVEFNUF9NSU5VU19J TkZJTklUWQorCisvKiBUaW1lIG9mIFNJR0tJTEwgZHVyaW5nIGltbWVkaWF0ZSBzaHV0ZG93biBv ciBjaGlsZCBjcmFzaCAqLworc3RhdGljIFRpbWVzdGFtcFR6IHNpZ2tpbGxfY2hpbGRyZW5fc2No ZWR1bGVkX2F0ID0gUE1fU0NIRURVTEVfTkVWRVI7CiAKIC8qIExlbmd0aCBvZiBzYWlkIHRpbWVv dXQgKi8KICNkZWZpbmUgU0lHS0lMTF9DSElMRFJFTl9BRlRFUl9TRUNTCQk1CiAKKy8qIFRpbWUg b2YgbmV4dCBsb2NrZmlsZSBjaGVjayBhbmQgc29ja2V0IHRvdWNoLiAqLworc3RhdGljIFRpbWVz dGFtcFR6IGxvY2tmaWxlX2NoZWNrX3NjaGVkdWxlZF9hdDsKK3N0YXRpYyBUaW1lc3RhbXBUeiBz b2NrZXRfdG91Y2hfc2NoZWR1bGVkX2F0OworCisvKiBMZW5ndGggb2Ygc2FpZCB0aW1lb3V0cyAq LworI2RlZmluZSBMT0NLRklMRV9DSEVDS19TRUNTCQkJCTYwCisjZGVmaW5lIFNPQ0tFVF9UT1VD SF9TRUNTCQkJCSg1OCAqIFNFQ1NfUEVSX01JTlVURSkKKwogc3RhdGljIGJvb2wgUmVhY2hlZE5v cm1hbFJ1bm5pbmcgPSBmYWxzZTsJLyogVCBpZiB3ZSd2ZSByZWFjaGVkIFBNX1JVTiAqLwogCiBi b29sCQlDbGllbnRBdXRoSW5Qcm9ncmVzcyA9IGZhbHNlOwkvKiBUIGR1cmluZyBuZXctY2xpZW50 CkBAIC00MDksNyArNDIwLDcgQEAgc3RhdGljIEROU1NlcnZpY2VSZWYgYm9uam91cl9zZHJlZiA9 IE5VTEw7CiAjZW5kaWYKIAogLyogU3RhdGUgZm9yIElPIHdvcmtlciBtYW5hZ2VtZW50LiAqLwot c3RhdGljIFRpbWVzdGFtcFR6IGlvX3dvcmtlcl9sYXVuY2hfbmV4dF90aW1lID0gMDsKK3N0YXRp YyBUaW1lc3RhbXBUeiBpb193b3JrZXJfbGF1bmNoX25leHRfdGltZTsKIHN0YXRpYyBpbnQJaW9f d29ya2VyX2NvdW50ID0gMDsKIHN0YXRpYyBQTUNoaWxkICppb193b3JrZXJfY2hpbGRyZW5bTUFY X0lPX1dPUktFUlNdOwogCkBAIC00NDcsNiArNDU4LDcgQEAgc3RhdGljIHZvaWQgVGVybWluYXRl Q2hpbGRyZW4oaW50IHNpZ25hbCk7CiBzdGF0aWMgaW50CUNvdW50Q2hpbGRyZW4oQmFja2VuZFR5 cGVNYXNrIHRhcmdldE1hc2spOwogc3RhdGljIHZvaWQgTGF1bmNoTWlzc2luZ0JhY2tncm91bmRQ cm9jZXNzZXModm9pZCk7CiBzdGF0aWMgdm9pZCBtYXliZV9zdGFydF9iZ3dvcmtlcnModm9pZCk7 CitzdGF0aWMgVGltZXN0YW1wVHogbWF5YmVfc3RhcnRfYmd3b3JrZXJzX3NjaGVkdWxlZF9hdCh2 b2lkKTsKIHN0YXRpYyBib29sIG1heWJlX3JlYXBfaW9fd29ya2VyKGludCBwaWQpOwogc3RhdGlj IHZvaWQgbWF5YmVfc3RhcnRfaW9fd29ya2Vycyh2b2lkKTsKIHN0YXRpYyBUaW1lc3RhbXBUeiBt YXliZV9zdGFydF9pb193b3JrZXJzX3NjaGVkdWxlZF9hdCh2b2lkKTsKQEAgLTE1NDUsMTAwICsx NTU3LDMzIEBAIGNoZWNrQ29udHJvbEZpbGUodm9pZCkKIAlGcmVlRmlsZShmcCk7CiB9CiAKK3N0 YXRpYyB2b2lkCitjb21wdXRlX25leHRfd2FrZXVwKFRpbWVzdGFtcFR6ICpuZXh0X3dha2V1cCwg VGltZXN0YW1wVHogd2FrZXVwKQoreworCWlmICgqbmV4dF93YWtldXAgPiB3YWtldXApCisJCSpu ZXh0X3dha2V1cCA9IHdha2V1cDsKK30KKwogLyoKICAqIERldGVybWluZSBob3cgbG9uZyBzaG91 bGQgd2UgbGV0IFNlcnZlckxvb3Agc2xlZXAsIGluIG1pbGxpc2Vjb25kcy4KLSAqCi0gKiBJbiBu b3JtYWwgY29uZGl0aW9ucyB3ZSB3YWl0IGF0IG1vc3Qgb25lIG1pbnV0ZSwgdG8gZW5zdXJlIHRo YXQgdGhlIG90aGVyCi0gKiBiYWNrZ3JvdW5kIHRhc2tzIGhhbmRsZWQgYnkgU2VydmVyTG9vcCBn ZXQgZG9uZSBldmVuIHdoZW4gbm8gcmVxdWVzdHMgYXJlCi0gKiBhcnJpdmluZy4gIEhvd2V2ZXIs IGlmIHRoZXJlIGFyZSBiYWNrZ3JvdW5kIHdvcmtlcnMgd2FpdGluZyB0byBiZSBzdGFydGVkLAot ICogd2UgZG9uJ3QgYWN0dWFsbHkgc2xlZXAgc28gdGhhdCB0aGV5IGFyZSBxdWlja2x5IHNlcnZp Y2VkLiAgT3RoZXIgZXhjZXB0aW9uCi0gKiBjYXNlcyBhcmUgYXMgc2hvd24gaW4gdGhlIGNvZGUu CisgKiBSZXR1cm5zIHRoZSB0aW1lIHRvIHdhaXQgZm9yIHRoZSBuZXh0IG9mIFNlcnZlckxvb3Ao KSdzIHNjaGVkdWxlZCBkdXRpZXMuCisgKiBUaGUgbG9uZ2VzdCBwb3NzaWJsZSB3YWl0IGlzIG9u ZSBtaW51dGUgKExPQ0tGSUxFX0NIRUNLX1NFQ1MpLCBidXQgaXQgY291bGQKKyAqIGJlIGFzIGxv dyBhcyB6ZXJvIGlmIG9uZSB0aGUgam9icyBiZWxvdyBpcyBkdWUvb3ZlcmR1ZSBub3cuCiAgKi8K IHN0YXRpYyBpbnQKIERldGVybWluZVNsZWVwVGltZSh2b2lkKQogewotCVRpbWVzdGFtcFR6IG5l eHRfd2FrZXVwOwotCi0JLyoKLQkgKiBJZiBpbiBJbW1lZGlhdGVTaHV0ZG93biB3aXRoIGEgU0lH S0lMTCB0aW1lb3V0LCBpZ25vcmUgZXZlcnl0aGluZyBlbHNlCi0JICogYW5kIHdhaXQgZm9yIHRo YXQuCi0JICoKLQkgKiBYWFggU2hvdWxkbid0IHRoaXMgYWxzbyB0ZXN0IEZhdGFsRXJyb3I/Ci0J ICovCi0JaWYgKFNodXRkb3duID49IEltbWVkaWF0ZVNodXRkb3duKQotCXsKLQkJaWYgKEFib3J0 U3RhcnRUaW1lICE9IDApCi0JCXsKLQkJCXRpbWVfdAkJY3VydGltZSA9IHRpbWUoTlVMTCk7Ci0J CQlpbnQJCQlzZWNvbmRzOwotCi0JCQkvKgotCQkJICogdGltZSBsZWZ0IHRvIGFib3J0OyBjbGFt cCB0byAwIGlmIGl0IGFscmVhZHkgZXhwaXJlZCwgb3IgaWYKLQkJCSAqIHRpbWUgZ29lcyBiYWNr d2FyZHMKLQkJCSAqLwotCQkJaWYgKGN1cnRpbWUgPCBBYm9ydFN0YXJ0VGltZSB8fAotCQkJCWN1 cnRpbWUgLSBBYm9ydFN0YXJ0VGltZSA+PSBTSUdLSUxMX0NISUxEUkVOX0FGVEVSX1NFQ1MpCi0J CQkJc2Vjb25kcyA9IDA7Ci0JCQllbHNlCi0JCQkJc2Vjb25kcyA9IFNJR0tJTExfQ0hJTERSRU5f QUZURVJfU0VDUyAtCi0JCQkJCShjdXJ0aW1lIC0gQWJvcnRTdGFydFRpbWUpOwotCi0JCQlyZXR1 cm4gc2Vjb25kcyAqIDEwMDA7Ci0JCX0KLQl9Ci0KLQkvKiBUaW1lIG9mIG5leHQgbWF5YmVfc3Rh cnRfaW9fd29ya2VycygpIGNhbGwsIG9yIDAgZm9yIG5vbmUuICovCi0JbmV4dF93YWtldXAgPSBt YXliZV9zdGFydF9pb193b3JrZXJzX3NjaGVkdWxlZF9hdCgpOwotCi0JLyogSWdub3JlIGJnd29y a2VycyBkdXJpbmcgc2h1dGRvd24uICovCi0JaWYgKFN0YXJ0V29ya2VyTmVlZGVkICYmIFNodXRk b3duID09IE5vU2h1dGRvd24pCi0JCXJldHVybiAwOwotCi0JaWYgKEhhdmVDcmFzaGVkV29ya2Vy ICYmIFNodXRkb3duID09IE5vU2h1dGRvd24pCi0JewotCQlkbGlzdF9tdXRhYmxlX2l0ZXIgaXRl cjsKLQotCQkvKgotCQkgKiBXaGVuIHRoZXJlIGFyZSBjcmFzaGVkIGJnd29ya2Vycywgd2Ugc2xl ZXAganVzdCBsb25nIGVub3VnaCB0aGF0Ci0JCSAqIHRoZXkgYXJlIHJlc3RhcnRlZCB3aGVuIHRo ZXkgcmVxdWVzdCB0byBiZS4gIFNjYW4gdGhlIGxpc3QgdG8KLQkJICogZGV0ZXJtaW5lIHRoZSBt aW5pbXVtIG9mIGFsbCB3YWtldXAgdGltZXMgYWNjb3JkaW5nIHRvIG1vc3QgcmVjZW50Ci0JCSAq IGNyYXNoIHRpbWUgYW5kIHJlcXVlc3RlZCByZXN0YXJ0IGludGVydmFsLgotCQkgKi8KLQkJZGxp c3RfZm9yZWFjaF9tb2RpZnkoaXRlciwgJkJhY2tncm91bmRXb3JrZXJMaXN0KQotCQl7Ci0JCQlS ZWdpc3RlcmVkQmdXb3JrZXIgKnJ3OwotCQkJVGltZXN0YW1wVHogdGhpc193YWtldXA7Ci0KLQkJ CXJ3ID0gZGxpc3RfY29udGFpbmVyKFJlZ2lzdGVyZWRCZ1dvcmtlciwgcndfbG5vZGUsIGl0ZXIu Y3VyKTsKLQotCQkJaWYgKHJ3LT5yd19jcmFzaGVkX2F0ID09IDApCi0JCQkJY29udGludWU7Ci0K LQkJCWlmIChydy0+cndfd29ya2VyLmJnd19yZXN0YXJ0X3RpbWUgPT0gQkdXX05FVkVSX1JFU1RB UlQKLQkJCQl8fCBydy0+cndfdGVybWluYXRlKQotCQkJewotCQkJCUZvcmdldEJhY2tncm91bmRX b3JrZXIocncpOwotCQkJCWNvbnRpbnVlOwotCQkJfQorCVRpbWVzdGFtcFR6IG5leHRfd2FrZXVw ID0gUE1fU0NIRURVTEVfTkVWRVI7CiAKLQkJCXRoaXNfd2FrZXVwID0gVGltZXN0YW1wVHpQbHVz TWlsbGlzZWNvbmRzKHJ3LT5yd19jcmFzaGVkX2F0LAotCQkJCQkJCQkJCQkJCSAgMTAwMEwgKiBy dy0+cndfd29ya2VyLmJnd19yZXN0YXJ0X3RpbWUpOwotCQkJaWYgKG5leHRfd2FrZXVwID09IDAg fHwgdGhpc193YWtldXAgPCBuZXh0X3dha2V1cCkKLQkJCQluZXh0X3dha2V1cCA9IHRoaXNfd2Fr ZXVwOwotCQl9Ci0JfQotCi0JaWYgKG5leHRfd2FrZXVwICE9IDApCi0JewotCQlpbnQJCQltczsK KwkvKiBGaW5kIHRoZSB0aW1lIG9mIHRoZSBuZXh0IHNjaGVkdWxlZCBTZXJ2ZXJMb29wKCkgZHV0 eS4gKi8KKwljb21wdXRlX25leHRfd2FrZXVwKCZuZXh0X3dha2V1cCwgc2lna2lsbF9jaGlsZHJl bl9zY2hlZHVsZWRfYXQpOworCWNvbXB1dGVfbmV4dF93YWtldXAoJm5leHRfd2FrZXVwLCBsb2Nr ZmlsZV9jaGVja19zY2hlZHVsZWRfYXQpOworCWNvbXB1dGVfbmV4dF93YWtldXAoJm5leHRfd2Fr ZXVwLCBzb2NrZXRfdG91Y2hfc2NoZWR1bGVkX2F0KTsKKwljb21wdXRlX25leHRfd2FrZXVwKCZu ZXh0X3dha2V1cCwgbWF5YmVfc3RhcnRfaW9fd29ya2Vyc19zY2hlZHVsZWRfYXQoKSk7CisJY29t cHV0ZV9uZXh0X3dha2V1cCgmbmV4dF93YWtldXAsIG1heWJlX3N0YXJ0X2Jnd29ya2Vyc19zY2hl ZHVsZWRfYXQoKSk7CiAKLQkJLyogcmVzdWx0IG9mIFRpbWVzdGFtcERpZmZlcmVuY2VNaWxsaXNl Y29uZHMgaXMgaW4gWzAsIElOVF9NQVhdICovCi0JCW1zID0gKGludCkgVGltZXN0YW1wRGlmZmVy ZW5jZU1pbGxpc2Vjb25kcyhHZXRDdXJyZW50VGltZXN0YW1wKCksCi0JCQkJCQkJCQkJCQkgICBu ZXh0X3dha2V1cCk7Ci0JCXJldHVybiBNaW4oNjAgKiAxMDAwLCBtcyk7Ci0JfQotCi0JcmV0dXJu IDYwICogMTAwMDsKKwkvKiByZXN1bHQgb2YgVGltZXN0YW1wRGlmZmVyZW5jZU1pbGxpc2Vjb25k cyBpcyBpbiBbMCwgSU5UX01BWF0gKi8KKwlyZXR1cm4gVGltZXN0YW1wRGlmZmVyZW5jZU1pbGxp c2Vjb25kcyhHZXRDdXJyZW50VGltZXN0YW1wKCksIG5leHRfd2FrZXVwKTsKIH0KIAogLyoKQEAg LTE2NzYsMTcgKzE2MjEsMTcgQEAgQ29uZmlndXJlUG9zdG1hc3RlcldhaXRTZXQoYm9vbCBhY2Nl cHRfY29ubmVjdGlvbnMpCiBzdGF0aWMgaW50CiBTZXJ2ZXJMb29wKHZvaWQpCiB7Ci0JdGltZV90 CQlsYXN0X2xvY2tmaWxlX3JlY2hlY2tfdGltZSwKLQkJCQlsYXN0X3RvdWNoX3RpbWU7CiAJV2Fp dEV2ZW50CWV2ZW50c1tNQVhMSVNURU5dOwogCWludAkJCW5ldmVudHM7CiAKIAlDb25maWd1cmVQ b3N0bWFzdGVyV2FpdFNldCh0cnVlKTsKLQlsYXN0X2xvY2tmaWxlX3JlY2hlY2tfdGltZSA9IGxh c3RfdG91Y2hfdGltZSA9IHRpbWUoTlVMTCk7CisKKwlsb2NrZmlsZV9jaGVja19zY2hlZHVsZWRf YXQgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisJc29ja2V0X3RvdWNoX3NjaGVkdWxlZF9hdCA9 IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKIAogCWZvciAoOzspCiAJewotCQl0aW1lX3QJCW5vdzsK KwkJVGltZXN0YW1wVHogbm93OwogCiAJCW5ldmVudHMgPSBXYWl0RXZlbnRTZXRXYWl0KHBtX3dh aXRfc2V0LAogCQkJCQkJCQkgICBEZXRlcm1pbmVTbGVlcFRpbWUoKSwKQEAgLTE3NjEsMTIgKzE3 MDYsOSBAQCBTZXJ2ZXJMb29wKHZvaWQpCiAJCS8qCiAJCSAqIExhc3RseSwgY2hlY2sgdG8gc2Vl IGlmIGl0J3MgdGltZSB0byBkbyBzb21lIHRoaW5ncyB0aGF0IHdlIGRvbid0CiAJCSAqIHdhbnQg dG8gZG8gZXZlcnkgc2luZ2xlIHRpbWUgdGhyb3VnaCB0aGUgbG9vcCwgYmVjYXVzZSB0aGV5J3Jl IGEKLQkJICogYml0IGV4cGVuc2l2ZS4gIE5vdGUgdGhhdCB0aGVyZSdzIHVwIHRvIGEgbWludXRl IG9mIHNsb3AgaW4gd2hlbgotCQkgKiB0aGVzZSB0YXNrcyB3aWxsIGJlIHBlcmZvcm1lZCwgc2lu Y2UgRGV0ZXJtaW5lU2xlZXBUaW1lKCkgd2lsbCBsZXQKLQkJICogdXMgc2xlZXAgYXQgbW9zdCB0 aGF0IGxvbmc7IGV4Y2VwdCBmb3IgU0lHS0lMTCB0aW1lb3V0IHdoaWNoIGhhcwotCQkgKiBzcGVj aWFsLWNhc2UgbG9naWMgdGhlcmUuCisJCSAqIGJpdCBleHBlbnNpdmUuCiAJCSAqLwotCQlub3cg PSB0aW1lKE5VTEwpOworCQlub3cgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CiAKIAkJLyoKIAkJ ICogSWYgd2UgYWxyZWFkeSBzZW50IFNJR1FVSVQgdG8gY2hpbGRyZW4gYW5kIHRoZXkgYXJlIHNs b3cgdG8gc2h1dApAQCAtMTc3NywxMCArMTcxOSwxMCBAQCBTZXJ2ZXJMb29wKHZvaWQpCiAJCSAq CiAJCSAqIE5vdGUgd2UgYWxzbyBkbyB0aGlzIGR1cmluZyByZWNvdmVyeSBmcm9tIGEgcHJvY2Vz cyBjcmFzaC4KIAkJICovCi0JCWlmICgoU2h1dGRvd24gPj0gSW1tZWRpYXRlU2h1dGRvd24gfHwg RmF0YWxFcnJvcikgJiYKLQkJCUFib3J0U3RhcnRUaW1lICE9IDAgJiYKLQkJCShub3cgLSBBYm9y dFN0YXJ0VGltZSkgPj0gU0lHS0lMTF9DSElMRFJFTl9BRlRFUl9TRUNTKQorCQlpZiAobm93ID49 IHNpZ2tpbGxfY2hpbGRyZW5fc2NoZWR1bGVkX2F0KQogCQl7CisJCQlBc3NlcnQoU2h1dGRvd24g Pj0gSW1tZWRpYXRlU2h1dGRvd24gfHwgRmF0YWxFcnJvcik7CisKIAkJCS8qIFdlIHdlcmUgZ2Vu dGxlIHdpdGggdGhlbSBiZWZvcmUuIE5vdCBhbnltb3JlICovCiAJCQllcmVwb3J0KExPRywKIAkJ CS8qIHRyYW5zbGF0b3I6ICVzIGlzIFNJR0tJTEwgb3IgU0lHQUJSVCAqLwpAQCAtMTc4OCw3ICsx NzMwLDcgQEAgU2VydmVyTG9vcCh2b2lkKQogCQkJCQkJCXNlbmRfYWJvcnRfZm9yX2tpbGwgPyAi U0lHQUJSVCIgOiAiU0lHS0lMTCIpKSk7CiAJCQlUZXJtaW5hdGVDaGlsZHJlbihzZW5kX2Fib3J0 X2Zvcl9raWxsID8gU0lHQUJSVCA6IFNJR0tJTEwpOwogCQkJLyogcmVzZXQgZmxhZyBzbyB3ZSBk b24ndCBTSUdLSUxMIGFnYWluICovCi0JCQlBYm9ydFN0YXJ0VGltZSA9IDA7CisJCQlzaWdraWxs X2NoaWxkcmVuX3NjaGVkdWxlZF9hdCA9IFBNX1NDSEVEVUxFX05FVkVSOwogCQl9CiAKIAkJLyoK QEAgLTE4MDEsNyArMTc0Myw3IEBAIFNlcnZlckxvb3Aodm9pZCkKIAkJICogc3RhcnRpbmcgYSBu ZXcgcG9zdG1hc3Rlci4gIERhdGEgY29ycnVwdGlvbiBpcyBsaWtlbHkgdG8gZW5zdWUgZnJvbQog CQkgKiB0aGF0IGFueXdheSwgYnV0IHdlIGNhbiBtaW5pbWl6ZSB0aGUgZGFtYWdlIGJ5IGFib3J0 aW5nIEFTQVAuCiAJCSAqLwotCQlpZiAobm93IC0gbGFzdF9sb2NrZmlsZV9yZWNoZWNrX3RpbWUg Pj0gMSAqIFNFQ1NfUEVSX01JTlVURSkKKwkJaWYgKG5vdyA+PSBsb2NrZmlsZV9jaGVja19zY2hl ZHVsZWRfYXQpCiAJCXsKIAkJCWlmICghUmVjaGVja0RhdGFEaXJMb2NrRmlsZSgpKQogCQkJewpA QCAtMTgwOSw3ICsxNzUxLDkgQEAgU2VydmVyTG9vcCh2b2lkKQogCQkJCQkJKGVycm1zZygicGVy Zm9ybWluZyBpbW1lZGlhdGUgc2h1dGRvd24gYmVjYXVzZSBkYXRhIGRpcmVjdG9yeSBsb2NrIGZp bGUgaXMgaW52YWxpZCIpKSk7CiAJCQkJa2lsbChNeVByb2NQaWQsIFNJR1FVSVQpOwogCQkJfQot CQkJbGFzdF9sb2NrZmlsZV9yZWNoZWNrX3RpbWUgPSBub3c7CisJCQlsb2NrZmlsZV9jaGVja19z Y2hlZHVsZWRfYXQgPQorCQkJCVRpbWVzdGFtcFR6UGx1c1NlY29uZHMobG9ja2ZpbGVfY2hlY2tf c2NoZWR1bGVkX2F0LAorCQkJCQkJCQkJICAgTE9DS0ZJTEVfQ0hFQ0tfU0VDUyk7CiAJCX0KIAog CQkvKgpAQCAtMTgxNywxMSArMTc2MSwxMyBAQCBTZXJ2ZXJMb29wKHZvaWQpCiAJCSAqIHRoZXkg YXJlIG5vdCByZW1vdmVkIGJ5IG92ZXJ6ZWFsb3VzIC90bXAtY2xlYW5pbmcgdGFza3MuICBXZSBh c3N1bWUKIAkJICogbm8gb25lIHJ1bnMgY2xlYW5lcnMgd2l0aCBjdXRvZmYgdGltZXMgb2YgbGVz cyB0aGFuIGFuIGhvdXIgLi4uCiAJCSAqLwotCQlpZiAobm93IC0gbGFzdF90b3VjaF90aW1lID49 IDU4ICogU0VDU19QRVJfTUlOVVRFKQorCQlpZiAobm93ID49IHNvY2tldF90b3VjaF9zY2hlZHVs ZWRfYXQpCiAJCXsKIAkJCVRvdWNoU29ja2V0RmlsZXMoKTsKIAkJCVRvdWNoU29ja2V0TG9ja0Zp bGVzKCk7Ci0JCQlsYXN0X3RvdWNoX3RpbWUgPSBub3c7CisJCQlzb2NrZXRfdG91Y2hfc2NoZWR1 bGVkX2F0ID0KKwkJCQlUaW1lc3RhbXBUelBsdXNTZWNvbmRzKHNvY2tldF90b3VjaF9zY2hlZHVs ZWRfYXQsCisJCQkJCQkJCQkgICBTT0NLRVRfVE9VQ0hfU0VDUyk7CiAJCX0KIAl9CiB9CkBAIC0y MjM1LDcgKzIxODEsOSBAQCBwcm9jZXNzX3BtX3NodXRkb3duX3JlcXVlc3Qodm9pZCkKIAkJCVVw ZGF0ZVBNU3RhdGUoUE1fV0FJVF9CQUNLRU5EUyk7CiAKIAkJCS8qIHNldCBzdG9wd2F0Y2ggZm9y IHRoZW0gdG8gZGllICovCi0JCQlBYm9ydFN0YXJ0VGltZSA9IHRpbWUoTlVMTCk7CisJCQlzaWdr aWxsX2NoaWxkcmVuX3NjaGVkdWxlZF9hdCA9CisJCQkJVGltZXN0YW1wVHpQbHVzU2Vjb25kcyhH ZXRDdXJyZW50VGltZXN0YW1wKCksCisJCQkJCQkJCQkgICBTSUdLSUxMX0NISUxEUkVOX0FGVEVS X1NFQ1MpOwogCiAJCQkvKgogCQkJICogTm93IHdhaXQgZm9yIGJhY2tlbmRzIHRvIGV4aXQuICBJ ZiB0aGVyZSBhcmUgbm9uZSwKQEAgLTIzNTgsNyArMjMwNiw3IEBAIHByb2Nlc3NfcG1fY2hpbGRf ZXhpdCh2b2lkKQogCQkJICovCiAJCQlTdGFydHVwU3RhdHVzID0gU1RBUlRVUF9OT1RfUlVOTklO RzsKIAkJCUZhdGFsRXJyb3IgPSBmYWxzZTsKLQkJCUFib3J0U3RhcnRUaW1lID0gMDsKKwkJCXNp Z2tpbGxfY2hpbGRyZW5fc2NoZWR1bGVkX2F0ID0gUE1fU0NIRURVTEVfTkVWRVI7CiAJCQlSZWFj aGVkTm9ybWFsUnVubmluZyA9IHRydWU7CiAJCQlVcGRhdGVQTVN0YXRlKFBNX1JVTik7CiAJCQlj b25uc0FsbG93ZWQgPSB0cnVlOwpAQCAtMjgxOSw4ICsyNzY3LDEwIEBAIEhhbmRsZUZhdGFsRXJy b3IoUXVpdFNpZ25hbFJlYXNvbiByZWFzb24sIGJvb2wgY29uc2lkZXJfc2lnYWJydCkKIAkgKiAu LiBhbmQgaWYgdGhpcyBkb2Vzbid0IGhhcHBlbiBxdWlja2x5IGVub3VnaCwgbm93IHRoZSBjbG9j ayBpcyB0aWNraW5nCiAJICogZm9yIHVzIHRvIGtpbGwgdGhlbSB3aXRob3V0IG1lcmN5LgogCSAq LwotCWlmIChBYm9ydFN0YXJ0VGltZSA9PSAwKQotCQlBYm9ydFN0YXJ0VGltZSA9IHRpbWUoTlVM TCk7CisJaWYgKHNpZ2tpbGxfY2hpbGRyZW5fc2NoZWR1bGVkX2F0ID09IFBNX1NDSEVEVUxFX05F VkVSKQorCQlzaWdraWxsX2NoaWxkcmVuX3NjaGVkdWxlZF9hdCA9CisJCQlUaW1lc3RhbXBUelBs dXNTZWNvbmRzKEdldEN1cnJlbnRUaW1lc3RhbXAoKSwKKwkJCQkJCQkJICAgU0lHS0lMTF9DSElM RFJFTl9BRlRFUl9TRUNTKTsKIH0KIAogLyoKQEAgLTMyODYsNyArMzIzNiw3IEBAIFBvc3RtYXN0 ZXJTdGF0ZU1hY2hpbmUodm9pZCkKIAkJQXNzZXJ0KFN0YXJ0dXBQTUNoaWxkICE9IE5VTEwpOwog CQlTdGFydHVwU3RhdHVzID0gU1RBUlRVUF9SVU5OSU5HOwogCQkvKiBjcmFzaCByZWNvdmVyeSBz dGFydGVkLCByZXNldCBTSUdLSUxMIGZsYWcgKi8KLQkJQWJvcnRTdGFydFRpbWUgPSAwOworCQlz aWdraWxsX2NoaWxkcmVuX3NjaGVkdWxlZF9hdCA9IFBNX1NDSEVEVUxFX05FVkVSOwogCiAJCS8q IHN0YXJ0IGFjY2VwdGluZyBzZXJ2ZXIgc29ja2V0IGNvbm5lY3Rpb24gZXZlbnRzIGFnYWluICov CiAJCUNvbmZpZ3VyZVBvc3RtYXN0ZXJXYWl0U2V0KHRydWUpOwpAQCAtMzc2Myw3ICszNzEzLDcg QEAgcHJvY2Vzc19wbV9wbXNpZ25hbCh2b2lkKQogCXsKIAkJLyogV0FMIHJlZG8gaGFzIHN0YXJ0 ZWQuIFdlJ3JlIG91dCBvZiByZWluaXRpYWxpemF0aW9uLiAqLwogCQlGYXRhbEVycm9yID0gZmFs c2U7Ci0JCUFib3J0U3RhcnRUaW1lID0gMDsKKwkJc2lna2lsbF9jaGlsZHJlbl9zY2hlZHVsZWRf YXQgPSBQTV9TQ0hFRFVMRV9ORVZFUjsKIAkJcmVhY2hlZENvbnNpc3RlbmN5ID0gZmFsc2U7CiAK IAkJLyoKQEAgLTQyODMsNiArNDIzMyw1NiBAQCBiZ3dvcmtlcl9zaG91bGRfc3RhcnRfbm93KEJn V29ya2VyU3RhcnRUaW1lIHN0YXJ0X3RpbWUpCiAJcmV0dXJuIGZhbHNlOwogfQogCitzdGF0aWMg VGltZXN0YW1wVHoKK21heWJlX3N0YXJ0X2Jnd29ya2Vyc19zY2hlZHVsZWRfYXQodm9pZCkKK3sK KwlUaW1lc3RhbXBUeiBuZXh0X3dha2V1cDsKKworCS8qIEJhY2tncm91bmQgd29ya2VycyBhcmUg aWdub3JlZCBkdXJpbmcgc2h1dGRvd24uICovCisJaWYgKFNodXRkb3duICE9IE5vU2h1dGRvd24p CisJCXJldHVybiBQTV9TQ0hFRFVMRV9ORVZFUjsKKworCS8qIERvIHdlIG5lZWQgYSB3b3JrZXIg cmlnaHQgbm93PyAqLworCWlmIChTdGFydFdvcmtlck5lZWRlZCkKKwkJcmV0dXJuIFBNX1NDSEVE VUxFX0lNTUVESUFURUxZOworCisJbmV4dF93YWtldXAgPSBQTV9TQ0hFRFVMRV9ORVZFUjsKKwlp ZiAoSGF2ZUNyYXNoZWRXb3JrZXIpCisJeworCQlkbGlzdF9tdXRhYmxlX2l0ZXIgaXRlcjsKKwor CQkvKgorCQkgKiBXaGVuIHRoZXJlIGFyZSBjcmFzaGVkIGJnd29ya2Vycywgd2Ugc2xlZXAganVz dCBsb25nIGVub3VnaCB0aGF0CisJCSAqIHRoZXkgYXJlIHJlc3RhcnRlZCB3aGVuIHRoZXkgcmVx dWVzdCB0byBiZS4gIFNjYW4gdGhlIGxpc3QgdG8KKwkJICogZGV0ZXJtaW5lIHRoZSBtaW5pbXVt IG9mIGFsbCB3YWtldXAgdGltZXMgYWNjb3JkaW5nIHRvIG1vc3QgcmVjZW50CisJCSAqIGNyYXNo IHRpbWUgYW5kIHJlcXVlc3RlZCByZXN0YXJ0IGludGVydmFsLgorCQkgKi8KKwkJZGxpc3RfZm9y ZWFjaF9tb2RpZnkoaXRlciwgJkJhY2tncm91bmRXb3JrZXJMaXN0KQorCQl7CisJCQlSZWdpc3Rl cmVkQmdXb3JrZXIgKnJ3OworCQkJVGltZXN0YW1wVHogdGhpc193YWtldXA7CisKKwkJCXJ3ID0g ZGxpc3RfY29udGFpbmVyKFJlZ2lzdGVyZWRCZ1dvcmtlciwgcndfbG5vZGUsIGl0ZXIuY3VyKTsK KworCQkJaWYgKHJ3LT5yd19jcmFzaGVkX2F0ID09IDApCisJCQkJY29udGludWU7CisKKwkJCWlm IChydy0+cndfd29ya2VyLmJnd19yZXN0YXJ0X3RpbWUgPT0gQkdXX05FVkVSX1JFU1RBUlQKKwkJ CQl8fCBydy0+cndfdGVybWluYXRlKQorCQkJeworCQkJCUZvcmdldEJhY2tncm91bmRXb3JrZXIo cncpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQl0aGlzX3dha2V1cCA9IFRpbWVzdGFtcFR6 UGx1c01pbGxpc2Vjb25kcyhydy0+cndfY3Jhc2hlZF9hdCwKKwkJCQkJCQkJCQkJCQkgIDEwMDBM ICogcnctPnJ3X3dvcmtlci5iZ3dfcmVzdGFydF90aW1lKTsKKwkJCWNvbXB1dGVfbmV4dF93YWtl dXAoJm5leHRfd2FrZXVwLCB0aGlzX3dha2V1cCk7CisJCX0KKwl9CisKKwlyZXR1cm4gbmV4dF93 YWtldXA7Cit9CisKIC8qCiAgKiBJZiB0aGUgdGltZSBpcyByaWdodCwgc3RhcnQgYmFja2dyb3Vu ZCB3b3JrZXIocykuCiAgKgpAQCAtNDQyOCw4ICs0NDI4LDggQEAgbWF5YmVfcmVhcF9pb193b3Jr ZXIoaW50IHBpZCkKIAogLyoKICAqIFJldHVybnMgdGhlIG5leHQgdGltZSBhdCB3aGljaCBtYXli ZV9zdGFydF9pb193b3JrZXJzKCkgd291bGQgc3RhcnQgb25lIG9yCi0gKiBtb3JlIEkvTyB3b3Jr ZXJzLiAgQW55IHRpbWUgaW4gdGhlIHBhc3QgbWVhbnMgQVNBUCwgYW5kIDAgbWVhbnMgbm8gd29y a2VyCi0gKiBpcyBjdXJyZW50bHkgc2NoZWR1bGVkLgorICogbW9yZSBJL08gd29ya2Vycywgb3Ig b25lIG9mIHRoZSBzcGVjaWFsIHZhbHVlcyBQTV9TQ0hFRFVMRV9JTU1FRElBVEVMWSBhbmQKKyAq IFBNX1NDSEVEVUxFX05FVkVSLgogICoKICAqIFRoaXMgaXMgY2FsbGVkIGJ5IERldGVybWluZVNs ZWVwVGltZSgpIGFuZCBhbHNvIG1heWJlX3N0YXJ0X2lvX3dvcmtlcnMoKQogICogaXRzZWxmLCB0 byBtYWtlIHN1cmUgdGhhdCB0aGV5IGFncmVlLgpAQCAtNDQzOCwyNSArNDQzOCwyNSBAQCBzdGF0 aWMgVGltZXN0YW1wVHoKIG1heWJlX3N0YXJ0X2lvX3dvcmtlcnNfc2NoZWR1bGVkX2F0KHZvaWQp CiB7CiAJaWYgKCFwZ2Fpb193b3JrZXJzX2VuYWJsZWQoKSkKLQkJcmV0dXJuIDA7CisJCXJldHVy biBQTV9TQ0hFRFVMRV9ORVZFUjsKIAogCS8qCiAJICogSWYgd2UncmUgaW4gZmluYWwgc2h1dHRp bmcgZG93biBzdGF0ZSwgdGhlbiB3ZSdyZSBqdXN0IHdhaXRpbmcgZm9yIGFsbAogCSAqIHByb2Nl c3NlcyB0byBleGl0LgogCSAqLwogCWlmIChwbVN0YXRlID49IFBNX1dBSVRfSU9fV09SS0VSUykK LQkJcmV0dXJuIDA7CisJCXJldHVybiBQTV9TQ0hFRFVMRV9ORVZFUjsKIAogCS8qIERvbid0IHN0 YXJ0IG5ldyB3b3JrZXJzIGR1cmluZyBhbiBpbW1lZGlhdGUgc2h1dGRvd24gZWl0aGVyLiAqLwog CWlmIChTaHV0ZG93biA+PSBJbW1lZGlhdGVTaHV0ZG93bikKLQkJcmV0dXJuIDA7CisJCXJldHVy biBQTV9TQ0hFRFVMRV9ORVZFUjsKIAogCS8qCiAJICogRG9uJ3Qgc3RhcnQgbmV3IHdvcmtlcnMg aWYgd2UncmUgaW4gdGhlIHNodXRkb3duIHBoYXNlIG9mIGEgY3Jhc2gKIAkgKiByZXN0YXJ0LiBC dXQgd2UgKmRvKiBuZWVkIHRvIHN0YXJ0IGlmIHdlJ3JlIGFscmVhZHkgc3RhcnRpbmcgdXAgYWdh aW4uCiAJICovCiAJaWYgKEZhdGFsRXJyb3IgJiYgcG1TdGF0ZSA+PSBQTV9TVE9QX0JBQ0tFTkRT KQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIFBNX1NDSEVEVUxFX05FVkVSOwogCiAJLyoKIAkgKiBE b24ndCBzdGFydCBhIHdvcmtlciBpZiB3ZSdyZSBhdCBvciBhYm92ZSB0aGUgbWF4aW11bS4gIChF eGNlc3Mgd29ya2VycwpAQCAtNDQ2NCwxNSArNDQ2NCwxNSBAQCBtYXliZV9zdGFydF9pb193b3Jr ZXJzX3NjaGVkdWxlZF9hdCh2b2lkKQogCSAqIHVudGlsIHRoZXkgYXJlIHJlYXBlZC4pCiAJICov CiAJaWYgKGlvX3dvcmtlcl9jb3VudCA+PSBpb19tYXhfd29ya2VycykKLQkJcmV0dXJuIDA7CisJ CXJldHVybiBQTV9TQ0hFRFVMRV9ORVZFUjsKIAogCS8qIElmIHdlJ3JlIHVuZGVyIHRoZSBtaW5p bXVtLCBzdGFydCBhIHdvcmtlciBhcyBzb29uIGFzIHBvc3NpYmxlLiAqLwogCWlmIChpb193b3Jr ZXJfY291bnQgPCBpb19taW5fd29ya2VycykKLQkJcmV0dXJuIFRJTUVTVEFNUF9NSU5VU19JTkZJ TklUWTsJLyogc3RhcnQgd29ya2VyIEFTQVAgKi8KKwkJcmV0dXJuIFBNX1NDSEVEVUxFX0lNTUVE SUFURUxZOwogCiAJLyogT25seSBwcm9jZWVkIGlmIGEgImdyb3ciIHNpZ25hbCBoYXMgYmVlbiBy ZWNlaXZlZCBmcm9tIGEgd29ya2VyLiAqLwogCWlmICghcGdhaW9fd29ya2VyX3BtX3Rlc3RfZ3Jv d19zaWduYWxfc2VudCgpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIFBNX1NDSEVEVUxFX05FVkVS OwogCiAJLyoKIAkgKiBtYXliZV9zdGFydF9pb193b3JrZXJzKCkgc2hvdWxkIHN0YXJ0IGEgbmV3 IEkvTyB3b3JrZXIgYWZ0ZXIgdGhpcyB0aW1lLApAQCAtNDQ5Miw3ICs0NDkyLDggQEAgbWF5YmVf c3RhcnRfaW9fd29ya2Vycyh2b2lkKQogewogCVRpbWVzdGFtcFR6IHNjaGVkdWxlZF9hdDsKIAot CXdoaWxlICgoc2NoZWR1bGVkX2F0ID0gbWF5YmVfc3RhcnRfaW9fd29ya2Vyc19zY2hlZHVsZWRf YXQoKSkgIT0gMCkKKwl3aGlsZSAoKHNjaGVkdWxlZF9hdCA9IG1heWJlX3N0YXJ0X2lvX3dvcmtl cnNfc2NoZWR1bGVkX2F0KCkpICE9CisJCSAgIFBNX1NDSEVEVUxFX05FVkVSKQogCXsKIAkJVGlt ZXN0YW1wVHogbm93ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwogCQlQTUNoaWxkICAgICpjaGls ZDsKLS0gCjIuNTMuMAoK --0000000000008f0d42064eef70b1--