mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-06 03:05:28 -05:00
deploy: 61887100ae
This commit is contained in:
parent
bf0a6a9761
commit
801768d0db
6 changed files with 6 additions and 6 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,2 +1,2 @@
|
|||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CCPool (containers-thread.CCPool)</title><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> – <a href="../index.html">containers-thread</a> » CCPool</nav><header class="odoc-preamble"><h1>Module <code><span>CCPool</span></code></h1></header><nav class="odoc-toc"><ul><li><a href="#thread-pool,-and-futures">Thread Pool, and Futures</a></li></ul></nav><div class="odoc-content"><h2 id="thread-pool,-and-futures"><a href="#thread-pool,-and-futures" class="anchor"></a>Thread Pool, and Futures</h2><p>Renamed and heavily updated from <code>CCFuture</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.16</li></ul><div class="odoc-spec"><div class="spec type anchored" id="type-state"><a href="#type-state" class="anchor"></a><code><span><span class="keyword">type</span> <span>+'a state</span></span><span> = </span></code><ol><li id="type-state.Done" class="def variant constructor anchored"><a href="#type-state.Done" class="anchor"></a><code><span>| </span><span><span class="constructor">Done</span> <span class="keyword">of</span> <span class="type-var">'a</span></span></code></li><li id="type-state.Waiting" class="def variant constructor anchored"><a href="#type-state.Waiting" class="anchor"></a><code><span>| </span><span><span class="constructor">Waiting</span></span></code></li><li id="type-state.Failed" class="def variant constructor anchored"><a href="#type-state.Failed" class="anchor"></a><code><span>| </span><span><span class="constructor">Failed</span> <span class="keyword">of</span> exn</span></code></li></ol></div></div><div class="odoc-spec"><div class="spec module-type anchored" id="module-type-PARAM"><a href="#module-type-PARAM" class="anchor"></a><code><span><span class="keyword">module</span> <span class="keyword">type</span> <a href="module-type-PARAM/index.html">PARAM</a></span><span> = <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div><div class="odoc-spec"><div class="spec exception anchored" id="exception-Stopped"><a href="#exception-Stopped" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Stopped</span></span></code></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Make"><a href="#module-Make" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Make/index.html">Make</a></span><span> (<a href="Make/argument-1-P/index.html">P</a> : <a href="module-type-PARAM/index.html">PARAM</a>) : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div></div></body></html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CCPool (containers-thread.CCPool)</title><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> – <a href="../index.html">containers-thread</a> » CCPool</nav><header class="odoc-preamble"><h1>Module <code><span>CCPool</span></code></h1></header><nav class="odoc-toc"><ul><li><a href="#thread-pool,-and-futures">Thread Pool, and Futures</a></li></ul></nav><div class="odoc-content"><h2 id="thread-pool,-and-futures"><a href="#thread-pool,-and-futures" class="anchor"></a>Thread Pool, and Futures</h2><p>Renamed and heavily updated from <code>CCFuture</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.16</li></ul><ul class="at-tags"><li class="deprecated"><span class="at-tag">deprecated</span> use moonpool or domainslib or saturn, libraries designed for multicore</li></ul><div class="odoc-spec"><div class="spec type anchored" id="type-state"><a href="#type-state" class="anchor"></a><code><span><span class="keyword">type</span> <span>+'a state</span></span><span> = </span></code><ol><li id="type-state.Done" class="def variant constructor anchored"><a href="#type-state.Done" class="anchor"></a><code><span>| </span><span><span class="constructor">Done</span> <span class="keyword">of</span> <span class="type-var">'a</span></span></code></li><li id="type-state.Waiting" class="def variant constructor anchored"><a href="#type-state.Waiting" class="anchor"></a><code><span>| </span><span><span class="constructor">Waiting</span></span></code></li><li id="type-state.Failed" class="def variant constructor anchored"><a href="#type-state.Failed" class="anchor"></a><code><span>| </span><span><span class="constructor">Failed</span> <span class="keyword">of</span> exn</span></code></li></ol></div></div><div class="odoc-spec"><div class="spec module-type anchored" id="module-type-PARAM"><a href="#module-type-PARAM" class="anchor"></a><code><span><span class="keyword">module</span> <span class="keyword">type</span> <a href="module-type-PARAM/index.html">PARAM</a></span><span> = <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div><div class="odoc-spec"><div class="spec exception anchored" id="exception-Stopped"><a href="#exception-Stopped" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Stopped</span></span></code></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Make"><a href="#module-Make" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Make/index.html">Make</a></span><span> (<a href="Make/argument-1-P/index.html">P</a> : <a href="module-type-PARAM/index.html">PARAM</a>) : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div></div></body></html>
|
||||
|
|
@ -1,2 +1,2 @@
|
|||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CCSemaphore (containers-thread.CCSemaphore)</title><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> – <a href="../index.html">containers-thread</a> » CCSemaphore</nav><header class="odoc-preamble"><h1>Module <code><span>CCSemaphore</span></code></h1></header><nav class="odoc-toc"><ul><li><a href="#semaphores">Semaphores</a></li></ul></nav><div class="odoc-content"><h2 id="semaphores"><a href="#semaphores" class="anchor"></a>Semaphores</h2><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.13</li></ul><div class="odoc-spec"><div class="spec type anchored" id="type-t"><a href="#type-t" class="anchor"></a><code><span><span class="keyword">type</span> t</span></code></div><div class="spec-doc"><p>A semaphore</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-create"><a href="#val-create" class="anchor"></a><code><span><span class="keyword">val</span> create : <span>int <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>create n</code> creates a semaphore with initial value <code>n</code>.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <span class="value">Invalid_argument</span> <p>if <code>n <= 0</code>.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-get"><a href="#val-get" class="anchor"></a><code><span><span class="keyword">val</span> get : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> int</span></code></div><div class="spec-doc"><p>Current value.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-acquire"><a href="#val-acquire" class="anchor"></a><code><span><span class="keyword">val</span> acquire : <span>int <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>acquire n s</code> blocks until <code>get s >= n</code>, then atomically sets <code>s := !s - n</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-release"><a href="#val-release" class="anchor"></a><code><span><span class="keyword">val</span> release : <span>int <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>release n s</code> atomically sets <code>s := !s + n</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-with_acquire"><a href="#val-with_acquire" class="anchor"></a><code><span><span class="keyword">val</span> with_acquire : <span>n:int <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <span>f:<span>(<span>unit <span class="arrow">-></span></span> <span class="type-var">'a</span>)</span> <span class="arrow">-></span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p><code>with_acquire ~n s ~f</code> first acquires <code>s</code> with <code>n</code> units, calls <code>f ()</code>, and then releases <code>s</code> with <code>n</code> units. Safely release the semaphore even if <code>f ()</code> fails.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-wait_until_at_least"><a href="#val-wait_until_at_least" class="anchor"></a><code><span><span class="keyword">val</span> wait_until_at_least : <span>n:int <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <span>f:<span>(<span>unit <span class="arrow">-></span></span> <span class="type-var">'a</span>)</span> <span class="arrow">-></span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p><code>wait_until_at_least ~n s ~f</code> waits until <code>get s >= n</code>, then calls <code>f ()</code> and returns its result. Doesn't modify the semaphore.</p></div></div></div></body></html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CCSemaphore (containers-thread.CCSemaphore)</title><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> – <a href="../index.html">containers-thread</a> » CCSemaphore</nav><header class="odoc-preamble"><h1>Module <code><span>CCSemaphore</span></code></h1></header><nav class="odoc-toc"><ul><li><a href="#semaphores">Semaphores</a></li></ul></nav><div class="odoc-content"><h2 id="semaphores"><a href="#semaphores" class="anchor"></a>Semaphores</h2><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.13</li></ul><ul class="at-tags"><li class="deprecated"><span class="at-tag">deprecated</span> use the stdlib's Semaphore module</li></ul><div class="odoc-spec"><div class="spec type anchored" id="type-t"><a href="#type-t" class="anchor"></a><code><span><span class="keyword">type</span> t</span></code></div><div class="spec-doc"><p>A semaphore</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-create"><a href="#val-create" class="anchor"></a><code><span><span class="keyword">val</span> create : <span>int <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>create n</code> creates a semaphore with initial value <code>n</code>.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <span class="value">Invalid_argument</span> <p>if <code>n <= 0</code>.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-get"><a href="#val-get" class="anchor"></a><code><span><span class="keyword">val</span> get : <span><a href="#type-t">t</a> <span class="arrow">-></span></span> int</span></code></div><div class="spec-doc"><p>Current value.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-acquire"><a href="#val-acquire" class="anchor"></a><code><span><span class="keyword">val</span> acquire : <span>int <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>acquire n s</code> blocks until <code>get s >= n</code>, then atomically sets <code>s := !s - n</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-release"><a href="#val-release" class="anchor"></a><code><span><span class="keyword">val</span> release : <span>int <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>release n s</code> atomically sets <code>s := !s + n</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-with_acquire"><a href="#val-with_acquire" class="anchor"></a><code><span><span class="keyword">val</span> with_acquire : <span>n:int <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <span>f:<span>(<span>unit <span class="arrow">-></span></span> <span class="type-var">'a</span>)</span> <span class="arrow">-></span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p><code>with_acquire ~n s ~f</code> first acquires <code>s</code> with <code>n</code> units, calls <code>f ()</code>, and then releases <code>s</code> with <code>n</code> units. Safely release the semaphore even if <code>f ()</code> fails.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-wait_until_at_least"><a href="#val-wait_until_at_least" class="anchor"></a><code><span><span class="keyword">val</span> wait_until_at_least : <span>n:int <span class="arrow">-></span></span> <span><a href="#type-t">t</a> <span class="arrow">-></span></span> <span>f:<span>(<span>unit <span class="arrow">-></span></span> <span class="type-var">'a</span>)</span> <span class="arrow">-></span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p><code>wait_until_at_least ~n s ~f</code> waits until <code>get s >= n</code>, then calls <code>f ()</code> and returns its result. Doesn't modify the semaphore.</p></div></div></div></body></html>
|
||||
|
|
@ -1,2 +1,2 @@
|
|||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CCThread (containers-thread.CCThread)</title><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> – <a href="../index.html">containers-thread</a> » CCThread</nav><header class="odoc-preamble"><h1>Module <code><span>CCThread</span></code></h1></header><nav class="odoc-toc"><ul><li><a href="#threads">Threads</a><ul><li><a href="#single-use-barrier">Single-Use Barrier</a></li></ul></li></ul></nav><div class="odoc-content"><h2 id="threads"><a href="#threads" class="anchor"></a>Threads</h2><p><b>status: unstable</b></p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.13</li></ul><div class="odoc-spec"><div class="spec type anchored" id="type-t"><a href="#type-t" class="anchor"></a><code><span><span class="keyword">type</span> t</span><span> = <a href="../../ocaml/Thread/index.html#type-t">Thread.t</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-spawn"><a href="#val-spawn" class="anchor"></a><code><span><span class="keyword">val</span> spawn : <span><span>(<span>unit <span class="arrow">-></span></span> <span class="type-var">_</span>)</span> <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>spawn f</code> creates a new thread that runs <code>f ()</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-spawn1"><a href="#val-spawn1" class="anchor"></a><code><span><span class="keyword">val</span> spawn1 : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">_</span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>spawn1 f x</code> is like <code>spawn (fun () -> f x)</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.16</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-spawn2"><a href="#val-spawn2" class="anchor"></a><code><span><span class="keyword">val</span> spawn2 : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span class="type-var">_</span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>spawn2 f x y</code> is like <code>spawn (fun () -> f x y)</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.16</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-detach"><a href="#val-detach" class="anchor"></a><code><span><span class="keyword">val</span> detach : <span><span>(<span>unit <span class="arrow">-></span></span> <span class="type-var">'a</span>)</span> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>detach f</code> is the same as <code>ignore (spawn f)</code>.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Arr"><a href="#module-Arr" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Arr/index.html">Arr</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div><h3 id="single-use-barrier"><a href="#single-use-barrier" class="anchor"></a>Single-Use Barrier</h3><div class="odoc-spec"><div class="spec module anchored" id="module-Barrier"><a href="#module-Barrier" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Barrier/index.html">Barrier</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div></div></body></html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CCThread (containers-thread.CCThread)</title><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> – <a href="../index.html">containers-thread</a> » CCThread</nav><header class="odoc-preamble"><h1>Module <code><span>CCThread</span></code></h1></header><nav class="odoc-toc"><ul><li><a href="#threads">Threads</a><ul><li><a href="#single-use-barrier">Single-Use Barrier</a></li></ul></li></ul></nav><div class="odoc-content"><h2 id="threads"><a href="#threads" class="anchor"></a>Threads</h2><p><b>status: unstable</b></p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.13</li></ul><ul class="at-tags"><li class="deprecated"><span class="at-tag">deprecated</span> use moonpool or domainslib or saturn, libraries designed for multicore</li></ul><div class="odoc-spec"><div class="spec type anchored" id="type-t"><a href="#type-t" class="anchor"></a><code><span><span class="keyword">type</span> t</span><span> = <a href="../../ocaml/Thread/index.html#type-t">Thread.t</a></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-spawn"><a href="#val-spawn" class="anchor"></a><code><span><span class="keyword">val</span> spawn : <span><span>(<span>unit <span class="arrow">-></span></span> <span class="type-var">_</span>)</span> <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>spawn f</code> creates a new thread that runs <code>f ()</code>.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-spawn1"><a href="#val-spawn1" class="anchor"></a><code><span><span class="keyword">val</span> spawn1 : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">_</span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>spawn1 f x</code> is like <code>spawn (fun () -> f x)</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.16</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-spawn2"><a href="#val-spawn2" class="anchor"></a><code><span><span class="keyword">val</span> spawn2 : <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></span></span> <span class="type-var">_</span>)</span> <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <span class="arrow">-></span></span> <a href="#type-t">t</a></span></code></div><div class="spec-doc"><p><code>spawn2 f x y</code> is like <code>spawn (fun () -> f x y)</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.16</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-detach"><a href="#val-detach" class="anchor"></a><code><span><span class="keyword">val</span> detach : <span><span>(<span>unit <span class="arrow">-></span></span> <span class="type-var">'a</span>)</span> <span class="arrow">-></span></span> unit</span></code></div><div class="spec-doc"><p><code>detach f</code> is the same as <code>ignore (spawn f)</code>.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Arr"><a href="#module-Arr" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Arr/index.html">Arr</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div><h3 id="single-use-barrier"><a href="#single-use-barrier" class="anchor"></a>Single-Use Barrier</h3><div class="odoc-spec"><div class="spec module anchored" id="module-Barrier"><a href="#module-Barrier" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Barrier/index.html">Barrier</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div></div></body></html>
|
||||
File diff suppressed because one or more lines are too long
Loading…
Add table
Reference in a new issue