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
F19507979: D21526.diff
Sat, Jan 10, 12:22 AM
F19048772: D21526.id.diff
Nov 27 2025, 3:28 PM
F19035098: D21526.id.diff
Nov 25 2025, 4:01 PM
F19030455: D21526.diff
Nov 24 2025, 9:01 PM
F19018542: D21526.diff
Nov 23 2025, 11:30 AM
F18999344: D21526.diff
Nov 20 2025, 8:53 PM
F18995301: D21526.diff
Nov 19 2025, 5:17 PM
F18845703: D21526.id51233.diff
Oct 29 2025, 2:05 PM
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