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
Unknown Object (File)
Thu, Dec 12, 12:29 AM
Unknown Object (File)
Sun, Dec 8, 11:54 AM
Unknown Object (File)
Wed, Dec 4, 3:41 AM
Unknown Object (File)
Sat, Nov 30, 4:19 PM
Unknown Object (File)
Nov 26 2024, 10:53 PM
Unknown Object (File)
Nov 25 2024, 10:42 PM
Unknown Object (File)
Nov 25 2024, 7:36 PM
Unknown Object (File)
Nov 22 2024, 12:11 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