Page MenuHomePhabricator

Prevent interruption by the PHP "set_time_limit()" mechanism while holding the durable write lock
ClosedPublic

Authored by epriestley on Jan 27 2021, 12:09 AM.
Tags
None
Referenced Files
F14095068: D21526.diff
Mon, Nov 25, 7:36 PM
Unknown Object (File)
Fri, Nov 22, 12:11 PM
Unknown Object (File)
Sun, Nov 17, 4:05 PM
Unknown Object (File)
Thu, Nov 14, 2:19 PM
Unknown Object (File)
Sun, Nov 10, 12:46 AM
Unknown Object (File)
Wed, Nov 6, 9:40 AM
Unknown Object (File)
Sun, Nov 3, 9:59 AM
Unknown Object (File)
Oct 26 2024, 3:17 AM
Subscribers
None

Details

Summary

Ref T13590. By default, PHP kills execution after web scripts run for 30 seconds. If this occurs in the locked section of a repository write while we're holding the durable write lock, the lock will get stuck.

Use "set_time_limit(0)" to prevent this mechanism from interrupting execution while the durable lock is held.

Test Plan
  • Added "set_time_limit(1)" before the lock and "while (1);" in the critical section of the lock.
  • Pushed, got the lock stuck.
  • Cleared the lock, applied this patch, pushed.
  • Got an infinite hang instead. (Normally, we expect the script to take more than 30 seconds to execute because there is a large push that executes in finite time, not because there's an infinte loop.)

Diff Detail

Repository
rP Phabricator
Branch
http4
Lint
Lint Passed
Unit
Tests Passed
Build Status
Buildable 25046
Build 34559: Run Core Tests
Build 34558: arc lint + arc unit