Files
jellytau/api/jellytau_lib/player/lock_order/index.html
T

18 lines
6.6 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A declared lock hierarchy for [`PlayerController`], and a tripwire that enforces it."><title>jellytau_lib::player::lock_order - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../../static.files/rustdoc-17e0aaed.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="jellytau_lib" data-themes="" data-resource-suffix="" data-rustdoc-version="1.97.1 (8bab26f4f 2026-07-14)" data-channel="1.97.1" data-search-js="search-fd9372ac.js" data-stringdex-js="stringdex-2da4960a.js" data-settings-js="settings-170eb4bf.js" ><script src="../../../static.files/storage-41dd4d93.js"></script><script defer src="../sidebar-items.js"></script><script defer src="../../../static.files/main-fcd733ba.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-f7c3ffd8.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-eab170b8.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-044be391.svg"></head><body class="rustdoc mod"><a class="skip-main-content" href="#main-content">Skip to main content</a><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">Module lock_order</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../../jellytau_lib/index.html">jellytau_<wbr>lib</a><span class="version">0.11.6</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module lock_<wbr>order</a></h2><h3><a href="#structs">Module Items</a></h3><ul class="block"><li><a href="#structs" title="Structs">Structs</a></li><li><a href="#constants" title="Constants">Constants</a></li><li><a href="#functions" title="Functions">Functions</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In jellytau_<wbr>lib::<wbr>player</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content" tabindex="-1"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../../index.html">jellytau_lib</a>::<wbr><a href="../index.html">player</a></div><h1>Module <span>lock_<wbr>order</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../../src/jellytau_lib/player/lock_order.rs.html#1-268">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>A declared lock hierarchy for [<code>PlayerController</code>], and a tripwire that
enforces it.</p>
<p>The controller carries seventeen separate mutexes, reached from the MPV event
loop, JNI callbacks, sleep/autoplay timers, the session poller and every IPC
command. Nothing about that arrangement prevents two threads taking the same
two locks in opposite orders, which deadlocks the player outright — and this
subsystem has already produced one deadlock (a tokio <code>MutexGuard</code> held in a
<code>match</code> scrutinee, which stalled the <code>AdvanceToNext</code> arm).</p>
<p>Today the code is disciplined: acquisitions are scoped, and <code>previous()</code> for
instance explicitly drops the backend guard before touching the queue. But
that holds by convention, and convention is not checked. <a href="constant.LOCK_ORDER.html" title="constant jellytau_lib::player::lock_order::LOCK_ORDER"><code>LOCK_ORDER</code></a>
writes the convention down and <code>every_overlapping_acquisition_respects_the_order</code>
fails the build when a change breaks it.</p>
<p>Ordering only matters where one guard is <strong>still held</strong> while another lock is
taken. Acquiring two locks one after another, each released before the next,
cannot deadlock — so the analysis looks for overlap, not for mere sequence.</p>
<p>TRACES: UR-005 | DR-052</p>
</div></details><h2 id="structs" class="section-header">Structs<a href="#structs" class="anchor">§</a></h2><dl class="item-table"><dt><a class="struct" href="struct.Overlap.html" title="struct jellytau_lib::player::lock_order::Overlap">Overlap</a></dt><dd>One lock acquired while another is still held.</dd></dl><h2 id="constants" class="section-header">Constants<a href="#constants" class="anchor">§</a></h2><dl class="item-table"><dt><a class="constant" href="constant.LOCK_ORDER.html" title="constant jellytau_lib::player::lock_order::LOCK_ORDER">LOCK_<wbr>ORDER</a></dt><dd>The order in which <code>PlayerController</code>s locks may be nested.</dd></dl><h2 id="functions" class="section-header">Functions<a href="#functions" class="anchor">§</a></h2><dl class="item-table"><dt><a class="fn" href="fn.overlapping_acquisitions.html" title="fn jellytau_lib::player::lock_order::overlapping_acquisitions">overlapping_<wbr>acquisitions</a></dt><dd>Find every place <code>src</code> takes a lock while holding another.</dd><dt><a class="fn" href="fn.parse_acquisition.html" title="fn jellytau_lib::player::lock_order::parse_acquisition">parse_<wbr>acquisition</a><span title="Restricted Visibility">&nbsp;🔒</span> </dt><dd>The first <code>self.other.lock_safe()</code> on <code>line</code> that is not <code>held</code>.</dd><dt><a class="fn" href="fn.parse_binding.html" title="fn jellytau_lib::player::lock_order::parse_binding">parse_<wbr>binding</a><span title="Restricted Visibility">&nbsp;🔒</span> </dt><dd><code>let [mut] name = self.field.lock_safe()</code><code>(name, field)</code>.</dd><dt><a class="fn" href="fn.rank.html" title="fn jellytau_lib::player::lock_order::rank">rank</a></dt><dd>Rank of <code>field</code> in <a href="constant.LOCK_ORDER.html" title="constant jellytau_lib::player::lock_order::LOCK_ORDER"><code>LOCK_ORDER</code></a>, or <code>None</code> if it is not a declared lock.</dd></dl></section></div></main></body></html>