Files
jellytau/api/jellytau_lib/utils/lock/index.html
T

16 lines
5.2 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="Poison-tolerant locking helpers."><title>jellytau_lib::utils::lock - 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</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.0</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Module lock</a></h2><h3><a href="#traits">Module Items</a></h3><ul class="block"><li><a href="#traits" title="Traits">Traits</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="../index.html">In jellytau_<wbr>lib::<wbr>utils</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">utils</a></div><h1>Module <span>lock</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/utils/lock.rs.html#1-111">Source</a> </span></div><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Poison-tolerant locking helpers.</p>
<p><code>std::sync::Mutex</code> and <code>RwLock</code> become <em>poisoned</em> if a thread panics while
holding the guard. After that, every <code>.lock().unwrap()</code> / <code>.read().unwrap()</code>
/ <code>.write().unwrap()</code> panics as well — so a single failure can cascade into
an unrecoverable crash. That is a real risk for stateful subsystems like the
player, whose locks are touched from many background threads (the MPV event
loop, sleep/autoplay timers, JNI callbacks, the session poller).</p>
<p>These extension traits recover the guard from a poisoned lock instead of
panicking. The data behind a poisoned lock may be in an unexpected state,
but for this applications state (queues, settings, flags) recovering and
continuing is far preferable to taking down playback entirely.</p>
<p>Use <code>lock_safe()</code> / <code>read_safe()</code> / <code>write_safe()</code> in place of
<code>.lock().unwrap()</code> / <code>.read().unwrap()</code> / <code>.write().unwrap()</code>.</p>
<p>Note: these apply only to <code>std::sync</code> primitives. <code>tokio::sync::Mutex</code> does
not poison, so async code keeps using <code>.lock().await</code> unchanged.</p>
</div></details><h2 id="traits" class="section-header">Traits<a href="#traits" class="anchor">§</a></h2><dl class="item-table"><dt><a class="trait" href="trait.MutexSafe.html" title="trait jellytau_lib::utils::lock::MutexSafe">Mutex<wbr>Safe</a></dt><dd>Poison-tolerant locking for <a href="https://doc.rust-lang.org/1.97.1/std/sync/poison/mutex/struct.Mutex.html" title="struct std::sync::poison::mutex::Mutex"><code>std::sync::Mutex</code></a>.</dd><dt><a class="trait" href="trait.RwLockSafe.html" title="trait jellytau_lib::utils::lock::RwLockSafe">RwLock<wbr>Safe</a></dt><dd>Poison-tolerant locking for <a href="https://doc.rust-lang.org/1.97.1/std/sync/poison/rwlock/struct.RwLock.html" title="struct std::sync::poison::rwlock::RwLock"><code>std::sync::RwLock</code></a>.</dd></dl></section></div></main></body></html>