Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/windirstat/llfio.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'classllfio__v2__xxx_1_1fast__random__file__handle.html')
-rw-r--r--classllfio__v2__xxx_1_1fast__random__file__handle.html142
1 files changed, 91 insertions, 51 deletions
diff --git a/classllfio__v2__xxx_1_1fast__random__file__handle.html b/classllfio__v2__xxx_1_1fast__random__file__handle.html
index d563f904..432d74b5 100644
--- a/classllfio__v2__xxx_1_1fast__random__file__handle.html
+++ b/classllfio__v2__xxx_1_1fast__random__file__handle.html
@@ -167,6 +167,12 @@ template&lt;class T &gt; </td></tr>
template&lt;class T &gt; </td></tr>
<tr class="memitem:a386543b3dd65d4d416d755a153eef593"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><b>io_result</b> = <a class="el" href="structllfio__v2__xxx_1_1io__handle_1_1io__result.html">io_handle::io_result</a>&lt; T &gt;</td></tr>
<tr class="separator:a386543b3dd65d4d416d755a153eef593"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa25e3ab298152166fc387d8fcfb19a63"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1file__handle.html#aa25e3ab298152166fc387d8fcfb19a63">lock_kind</a> { <b>unknown</b>,
+<a class="el" href="classllfio__v2__xxx_1_1file__handle.html#aa25e3ab298152166fc387d8fcfb19a63a9e81e7b963c71363e2fb3eefcfecfc0e">lock_kind::shared</a>,
+<a class="el" href="classllfio__v2__xxx_1_1file__handle.html#aa25e3ab298152166fc387d8fcfb19a63aa4293995cfbfa9ce60ce71ade2ff75f7">lock_kind::exclusive</a>
+ }<tr class="memdesc:aa25e3ab298152166fc387d8fcfb19a63"><td class="mdescLeft">&#160;</td><td class="mdescRight">The kinds of concurrent user exclusion which can be performed. <a href="classllfio__v2__xxx_1_1file__handle.html#aa25e3ab298152166fc387d8fcfb19a63">More...</a><br /></td></tr>
+</td></tr>
+<tr class="separator:aa25e3ab298152166fc387d8fcfb19a63"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7816bb7ae5156fa2997b68e6300ae565"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1io__handle.html#a7816bb7ae5156fa2997b68e6300ae565">barrier_kind</a> { <a class="el" href="classllfio__v2__xxx_1_1io__handle.html#a7816bb7ae5156fa2997b68e6300ae565a2f6648dac37731813bb84ae9b24bdfdb">barrier_kind::nowait_data_only</a>,
<a class="el" href="classllfio__v2__xxx_1_1io__handle.html#a7816bb7ae5156fa2997b68e6300ae565af1d3baf03681db9a9986e0a76d6107ce">barrier_kind::wait_data_only</a>,
<a class="el" href="classllfio__v2__xxx_1_1io__handle.html#a7816bb7ae5156fa2997b68e6300ae565ab7a52d26120f585b21e8960812db5bf1">barrier_kind::nowait_all</a>,
@@ -238,12 +244,12 @@ virtual result&lt; std::vector&lt; std::pair&lt; extent_type, extent_type &gt; &
<tr class="memitem:a28f78f709ba3d7b26ba38cefa21fd7b8"><td class="memItemLeft" align="right" valign="top"><a id="a28f78f709ba3d7b26ba38cefa21fd7b8"></a>
virtual <a class="el" href="structllfio__v2__xxx_1_1io__handle_1_1io__result.html">io_result</a>&lt; const_buffers_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>barrier</b> (<a class="el" href="structllfio__v2__xxx_1_1io__handle_1_1io__request.html">io_request</a>&lt; const_buffers_type &gt; reqs=<a class="el" href="structllfio__v2__xxx_1_1io__handle_1_1io__request.html">io_request</a>&lt; const_buffers_type &gt;(), <a class="el" href="classllfio__v2__xxx_1_1io__handle.html#a7816bb7ae5156fa2997b68e6300ae565">barrier_kind</a>=<a class="el" href="classllfio__v2__xxx_1_1io__handle.html#a7816bb7ae5156fa2997b68e6300ae565a2f6648dac37731813bb84ae9b24bdfdb">barrier_kind::nowait_data_only</a>, <a class="el" href="structllfio__v2__xxx_1_1deadline.html">deadline</a>=<a class="el" href="structllfio__v2__xxx_1_1deadline.html">deadline</a>()) noexcept override</td></tr>
<tr class="separator:a28f78f709ba3d7b26ba38cefa21fd7b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a23d7f6342dead9266633176cd578714d"><td class="memItemLeft" align="right" valign="top">virtual result&lt; <a class="el" href="classllfio__v2__xxx_1_1io__handle_1_1extent__guard.html">extent_guard</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1fast__random__file__handle.html#a23d7f6342dead9266633176cd578714d">lock</a> (extent_type offset, extent_type bytes, bool exclusive=true, <a class="el" href="structllfio__v2__xxx_1_1deadline.html">deadline</a>=<a class="el" href="structllfio__v2__xxx_1_1deadline.html">deadline</a>()) noexcept override</td></tr>
-<tr class="memdesc:a23d7f6342dead9266633176cd578714d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tries to lock the range of bytes specified for shared or exclusive access. Be aware this passes through the same semantics as the underlying OS call, including any POSIX insanity present on your platform: <a href="#a23d7f6342dead9266633176cd578714d">More...</a><br /></td></tr>
-<tr class="separator:a23d7f6342dead9266633176cd578714d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a26e98e20ea5be1a930d00b0b6f709436"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1fast__random__file__handle.html#a26e98e20ea5be1a930d00b0b6f709436">unlock</a> (extent_type, extent_type) noexcept override</td></tr>
-<tr class="memdesc:a26e98e20ea5be1a930d00b0b6f709436"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unlocks a byte range previously locked. <a href="#a26e98e20ea5be1a930d00b0b6f709436">More...</a><br /></td></tr>
-<tr class="separator:a26e98e20ea5be1a930d00b0b6f709436"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3b27d0f83fb72ebaa1e6a2eead9bec3e"><td class="memItemLeft" align="right" valign="top">virtual result&lt; <a class="el" href="classllfio__v2__xxx_1_1file__handle_1_1extent__guard.html">extent_guard</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1fast__random__file__handle.html#a3b27d0f83fb72ebaa1e6a2eead9bec3e">lock_range</a> (extent_type offset, extent_type bytes, <a class="el" href="classllfio__v2__xxx_1_1file__handle.html#aa25e3ab298152166fc387d8fcfb19a63">lock_kind</a> kind, <a class="el" href="structllfio__v2__xxx_1_1deadline.html">deadline</a>=<a class="el" href="structllfio__v2__xxx_1_1deadline.html">deadline</a>()) noexcept override</td></tr>
+<tr class="memdesc:a3b27d0f83fb72ebaa1e6a2eead9bec3e"><td class="mdescLeft">&#160;</td><td class="mdescRight">EXTENSION: Tries to lock the range of bytes specified for shared or exclusive access. Be aware this passes through the same semantics as the underlying OS call, including any POSIX insanity present on your platform: <a href="#a3b27d0f83fb72ebaa1e6a2eead9bec3e">More...</a><br /></td></tr>
+<tr class="separator:a3b27d0f83fb72ebaa1e6a2eead9bec3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0b20ae88c350702b39f41d8223f0b164"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1fast__random__file__handle.html#a0b20ae88c350702b39f41d8223f0b164">unlock_range</a> (extent_type, extent_type) noexcept override</td></tr>
+<tr class="memdesc:a0b20ae88c350702b39f41d8223f0b164"><td class="mdescLeft">&#160;</td><td class="mdescRight">EXTENSION: Unlocks a byte range previously locked. <a href="#a0b20ae88c350702b39f41d8223f0b164">More...</a><br /></td></tr>
+<tr class="separator:a0b20ae88c350702b39f41d8223f0b164"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad0cfbde678b809518ca005251ec64808"><td class="memItemLeft" align="right" valign="top"><a id="ad0cfbde678b809518ca005251ec64808"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1file__handle.html#ad0cfbde678b809518ca005251ec64808">swap</a> (<a class="el" href="classllfio__v2__xxx_1_1file__handle.html">file_handle</a> &amp;o) noexcept</td></tr>
<tr class="memdesc:ad0cfbde678b809518ca005251ec64808"><td class="mdescLeft">&#160;</td><td class="mdescRight">Swap with another instance. <br /></td></tr>
@@ -270,6 +276,12 @@ void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clas
<tr class="memitem:a5f7485307a0704aa1680e5785be2035d"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="structllfio__v2__xxx_1_1io__handle_1_1io__result.html">io_result</a>&lt; buffers_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1io__handle.html#a5f7485307a0704aa1680e5785be2035d">read</a> (<a class="el" href="structllfio__v2__xxx_1_1io__handle_1_1io__request.html">io_request</a>&lt; buffers_type &gt; reqs, <a class="el" href="structllfio__v2__xxx_1_1deadline.html">deadline</a> d=<a class="el" href="structllfio__v2__xxx_1_1deadline.html">deadline</a>()) noexcept</td></tr>
<tr class="memdesc:a5f7485307a0704aa1680e5785be2035d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read data from the open handle. <a href="#a5f7485307a0704aa1680e5785be2035d">More...</a><br /></td></tr>
<tr class="separator:a5f7485307a0704aa1680e5785be2035d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c5c229b11f488d0e9bff74c65737db2"><td class="memItemLeft" align="right" valign="top">result&lt; <a class="el" href="classllfio__v2__xxx_1_1file__handle_1_1extent__guard.html">extent_guard</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1file__handle.html#a3c5c229b11f488d0e9bff74c65737db2">lock_range</a> (<a class="el" href="structllfio__v2__xxx_1_1io__handle_1_1io__request.html">io_request</a>&lt; buffers_type &gt; reqs, <a class="el" href="structllfio__v2__xxx_1_1deadline.html">deadline</a> d=<a class="el" href="structllfio__v2__xxx_1_1deadline.html">deadline</a>()) noexcept</td></tr>
+<tr class="separator:a3c5c229b11f488d0e9bff74c65737db2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4055bb02680af02dcc189f0461bad503"><td class="memItemLeft" align="right" valign="top">result&lt; <a class="el" href="classllfio__v2__xxx_1_1file__handle_1_1extent__guard.html">extent_guard</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1file__handle.html#a4055bb02680af02dcc189f0461bad503">lock_range</a> (<a class="el" href="structllfio__v2__xxx_1_1io__handle_1_1io__request.html">io_request</a>&lt; const_buffers_type &gt; reqs, <a class="el" href="structllfio__v2__xxx_1_1deadline.html">deadline</a> d=<a class="el" href="structllfio__v2__xxx_1_1deadline.html">deadline</a>()) noexcept</td></tr>
+<tr class="separator:a4055bb02680af02dcc189f0461bad503"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2919da8c2520240c4e65f18f68872fd0"><td class="memItemLeft" align="right" valign="top">result&lt; <a class="el" href="classllfio__v2__xxx_1_1file__handle_1_1extent__guard.html">extent_guard</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1file__handle.html#a2919da8c2520240c4e65f18f68872fd0">try_lock_range</a> (extent_type offset, extent_type bytes, <a class="el" href="classllfio__v2__xxx_1_1file__handle.html#aa25e3ab298152166fc387d8fcfb19a63">lock_kind</a> kind) noexcept</td></tr>
+<tr class="separator:a2919da8c2520240c4e65f18f68872fd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ade38a6d55a4eda3c6d5e196683b129a7"><td class="memItemLeft" align="right" valign="top">virtual size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1io__handle.html#ade38a6d55a4eda3c6d5e196683b129a7">max_buffers</a> () const noexcept</td></tr>
<tr class="memdesc:ade38a6d55a4eda3c6d5e196683b129a7"><td class="mdescLeft">&#160;</td><td class="mdescRight">The <em>maximum</em> number of buffers which a single read or write syscall can process at a time for this specific open handle. On POSIX, this is known as <code>IOV_MAX</code>. <a href="#ade38a6d55a4eda3c6d5e196683b129a7">More...</a><br /></td></tr>
<tr class="separator:ade38a6d55a4eda3c6d5e196683b129a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -278,12 +290,6 @@ void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clas
<tr class="separator:a83884eca7b4cd09125a5cf8a155e6052"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab500784aa806dc7c2d90028d2f72de57"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structllfio__v2__xxx_1_1io__handle_1_1io__result.html">io_result</a>&lt; size_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1io__handle.html#ab500784aa806dc7c2d90028d2f72de57">write</a> (extent_type offset, std::initializer_list&lt; <a class="el" href="structllfio__v2__xxx_1_1io__handle_1_1const__buffer__type.html">const_buffer_type</a> &gt; lst, <a class="el" href="structllfio__v2__xxx_1_1deadline.html">deadline</a> d=<a class="el" href="structllfio__v2__xxx_1_1deadline.html">deadline</a>()) noexcept</td></tr>
<tr class="separator:ab500784aa806dc7c2d90028d2f72de57"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a369f8ec6a682030f8e7f5749eb7bc77e"><td class="memItemLeft" align="right" valign="top">result&lt; <a class="el" href="classllfio__v2__xxx_1_1io__handle_1_1extent__guard.html">extent_guard</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1io__handle.html#a369f8ec6a682030f8e7f5749eb7bc77e">lock</a> (<a class="el" href="structllfio__v2__xxx_1_1io__handle_1_1io__request.html">io_request</a>&lt; buffers_type &gt; reqs, <a class="el" href="structllfio__v2__xxx_1_1deadline.html">deadline</a> d=<a class="el" href="structllfio__v2__xxx_1_1deadline.html">deadline</a>()) noexcept</td></tr>
-<tr class="separator:a369f8ec6a682030f8e7f5749eb7bc77e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a198e1c294966a28919d2f0698e3608b8"><td class="memItemLeft" align="right" valign="top">result&lt; <a class="el" href="classllfio__v2__xxx_1_1io__handle_1_1extent__guard.html">extent_guard</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1io__handle.html#a198e1c294966a28919d2f0698e3608b8">lock</a> (<a class="el" href="structllfio__v2__xxx_1_1io__handle_1_1io__request.html">io_request</a>&lt; const_buffers_type &gt; reqs, <a class="el" href="structllfio__v2__xxx_1_1deadline.html">deadline</a> d=<a class="el" href="structllfio__v2__xxx_1_1deadline.html">deadline</a>()) noexcept</td></tr>
-<tr class="separator:a198e1c294966a28919d2f0698e3608b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae1abb705dbe9890e103365bf7c61521e"><td class="memItemLeft" align="right" valign="top">result&lt; <a class="el" href="classllfio__v2__xxx_1_1io__handle_1_1extent__guard.html">extent_guard</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1io__handle.html#ae1abb705dbe9890e103365bf7c61521e">try_lock</a> (extent_type offset, extent_type bytes, bool exclusive=true) noexcept</td></tr>
-<tr class="separator:ae1abb705dbe9890e103365bf7c61521e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac5222904f116c9beb0515a4a5aa850bf"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1handle.html#ac5222904f116c9beb0515a4a5aa850bf">QUICKCPPLIB_BITFIELD_BEGIN</a> (flag)</td></tr>
<tr class="memdesc:ac5222904f116c9beb0515a4a5aa850bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Bitwise flags which can be specified. <a href="#ac5222904f116c9beb0515a4a5aa850bf">More...</a><br /></td></tr>
<tr class="separator:ac5222904f116c9beb0515a4a5aa850bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -313,6 +319,7 @@ bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="clas
<tr class="memdesc:ac3aa3dc009822c0e437f317864534feb"><td class="mdescLeft">&#160;</td><td class="mdescRight">True if the handle is append only. <br /></td></tr>
<tr class="separator:ac3aa3dc009822c0e437f317864534feb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a101620e9fff0c0e8c346af0e9de58b6a"><td class="memItemLeft" align="right" valign="top">virtual result&lt; void &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1handle.html#a101620e9fff0c0e8c346af0e9de58b6a">set_append_only</a> (bool enable) noexcept</td></tr>
+<tr class="memdesc:a101620e9fff0c0e8c346af0e9de58b6a"><td class="mdescLeft">&#160;</td><td class="mdescRight">EXTENSION: Changes whether this handle is append only or not. <a href="#a101620e9fff0c0e8c346af0e9de58b6a">More...</a><br /></td></tr>
<tr class="separator:a101620e9fff0c0e8c346af0e9de58b6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8085cb3b40982c6dbd874547c183fd5e"><td class="memItemLeft" align="right" valign="top"><a id="a8085cb3b40982c6dbd874547c183fd5e"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1handle.html#a8085cb3b40982c6dbd874547c183fd5e">is_overlapped</a> () const noexcept</td></tr>
@@ -492,6 +499,36 @@ ino_t&#160;</td><td class="memItemRight" valign="bottom"><b>_inode</b> {0}</td><
<div class="fragment"><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; nowait_data_only, <span class="comment">//!&lt; Barrier data only, non-blocking. This is highly optimised on NV-DIMM storage, but consider using `nvram_barrier()` for even better performance.</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment"></span> wait_data_only, <span class="comment">//!&lt; Barrier data only, block until it is done. This is highly optimised on NV-DIMM storage, but consider using `nvram_barrier()` for even better performance.</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment"></span> nowait_all, <span class="comment">//!&lt; Barrier data and the metadata to retrieve it, non-blocking.</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment"></span> wait_all <span class="comment">//!&lt; Barrier data and the metadata to retrieve it, block until it is done.</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment"></span> };</div></div><!-- fragment -->
</div>
</div>
+<a id="aa25e3ab298152166fc387d8fcfb19a63"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa25e3ab298152166fc387d8fcfb19a63">&#9670;&nbsp;</a></span>lock_kind</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="classllfio__v2__xxx_1_1file__handle.html#aa25e3ab298152166fc387d8fcfb19a63">llfio_v2_xxx::file_handle::lock_kind</a></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">strong</span><span class="mlabel">inherited</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>The kinds of concurrent user exclusion which can be performed. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="aa25e3ab298152166fc387d8fcfb19a63a9e81e7b963c71363e2fb3eefcfecfc0e"></a>shared&#160;</td><td class="fielddoc"><p>Exclude only those requesting an exclusive lock on the same inode. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="aa25e3ab298152166fc387d8fcfb19a63aa4293995cfbfa9ce60ce71ade2ff75f7"></a>exclusive&#160;</td><td class="fielddoc"><p>Exclude those requesting any kind of lock on the same inode. </p>
+</td></tr>
+</table>
+<div class="fragment"><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; unknown,</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; shared, <span class="comment">//!&lt; Exclude only those requesting an exclusive lock on the same inode.</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment"></span> exclusive <span class="comment">//!&lt; Exclude those requesting any kind of lock on the same inode.</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment"></span> };</div></div><!-- fragment -->
+</div>
+</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a823391cea8818da742c0d4c573f7300f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a823391cea8818da742c0d4c573f7300f">&#9670;&nbsp;</a></span>barrier()</h2>
@@ -708,7 +745,7 @@ For portability, you can only assume that barriers write order for a single hand
</dl>
<div class="fragment"><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; {}) noexcept</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">if</span>(_mode == <a class="code" href="classllfio__v2__xxx_1_1handle.html#aa3930273a2d4cabbac309e0b75701dcaa9516dfb15f51c7ee19a4d46b8c0dbe1d">mode::append</a>)</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; {</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">return</span> errc::invalid_argument;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; byte _seed[16];</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">if</span>(seed.empty())</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="namespacellfio__v2__xxx_1_1utils.html#ae61e2de30b06776a1c24643a1d1dc64e">utils::random_fill</a>((<span class="keywordtype">char</span> *) _seed, <span class="keyword">sizeof</span>(_seed));</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; seed = _seed;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; }</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; result&lt;fast_random_file_handle&gt; ret(<a class="code" href="classllfio__v2__xxx_1_1fast__random__file__handle.html#a4661a9c1551d33d054ccd80599806ba7">fast_random_file_handle</a>(bytes, seed));</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; native_handle_type &amp;nativeh = ret.value()._v;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; LLFIO_LOG_FUNCTION_CALL(&amp;ret);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; nativeh.behaviour |= <a class="code" href="namespacellfio__v2__xxx.html#af31a062639499a79ef5cc8aed16ba65d">native_handle_type::disposition::file</a>;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; nativeh.behaviour |= native_handle_type::disposition::seekable | native_handle_type::disposition::readable;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">if</span>(_mode == <a class="code" href="classllfio__v2__xxx_1_1handle.html#aa3930273a2d4cabbac309e0b75701dcaaefb2a684e4afb7d55e6147fbe5a332ee">mode::write</a>)</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; {</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; nativeh.behaviour |= native_handle_type::disposition::writable;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; }</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div><div class="ttc" id="classllfio__v2__xxx_1_1fast__random__file__handle_html_a4661a9c1551d33d054ccd80599806ba7"><div class="ttname"><a href="classllfio__v2__xxx_1_1fast__random__file__handle.html#a4661a9c1551d33d054ccd80599806ba7">llfio_v2_xxx::fast_random_file_handle::fast_random_file_handle</a></div><div class="ttdeci">fast_random_file_handle()=default</div><div class="ttdoc">Default constructor. </div></div>
<div class="ttc" id="classllfio__v2__xxx_1_1handle_html_aa3930273a2d4cabbac309e0b75701dcaaefb2a684e4afb7d55e6147fbe5a332ee"><div class="ttname"><a href="classllfio__v2__xxx_1_1handle.html#aa3930273a2d4cabbac309e0b75701dcaaefb2a684e4afb7d55e6147fbe5a332ee">llfio_v2_xxx::handle::mode::write</a></div><div class="ttdoc">Ability to read and write (READ_CONTROL|FILE_READ_DATA|FILE_READ_ATTRIBUTES|FILE_READ_EA|FILE_WRITE_D...</div></div>
-<div class="ttc" id="namespacellfio__v2__xxx_html_af31a062639499a79ef5cc8aed16ba65d"><div class="ttname"><a href="namespacellfio__v2__xxx.html#af31a062639499a79ef5cc8aed16ba65d">llfio_v2_xxx::file</a></div><div class="ttdeci">result&lt; file_handle &gt; file(const path_handle &amp;base, file_handle::path_view_type path, file_handle::mode _mode=file_handle::mode::read, file_handle::creation _creation=file_handle::creation::open_existing, file_handle::caching _caching=file_handle::caching::all, file_handle::flag flags=file_handle::flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> file_handle.hpp:335</div></div>
+<div class="ttc" id="namespacellfio__v2__xxx_html_af31a062639499a79ef5cc8aed16ba65d"><div class="ttname"><a href="namespacellfio__v2__xxx.html#af31a062639499a79ef5cc8aed16ba65d">llfio_v2_xxx::file</a></div><div class="ttdeci">result&lt; file_handle &gt; file(const path_handle &amp;base, file_handle::path_view_type path, file_handle::mode _mode=file_handle::mode::read, file_handle::creation _creation=file_handle::creation::open_existing, file_handle::caching _caching=file_handle::caching::all, file_handle::flag flags=file_handle::flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> file_handle.hpp:501</div></div>
<div class="ttc" id="namespacellfio__v2__xxx_1_1utils_html_ae61e2de30b06776a1c24643a1d1dc64e"><div class="ttname"><a href="namespacellfio__v2__xxx_1_1utils.html#ae61e2de30b06776a1c24643a1d1dc64e">llfio_v2_xxx::utils::random_fill</a></div><div class="ttdeci">void random_fill(char *buffer, size_t bytes) noexcept</div><div class="ttdoc">Fills the buffer supplied with cryptographically strong randomness. Uses the OS kernel API...</div></div>
<div class="ttc" id="classllfio__v2__xxx_1_1handle_html_aa3930273a2d4cabbac309e0b75701dcaa9516dfb15f51c7ee19a4d46b8c0dbe1d"><div class="ttname"><a href="classllfio__v2__xxx_1_1handle.html#aa3930273a2d4cabbac309e0b75701dcaa9516dfb15f51c7ee19a4d46b8c0dbe1d">llfio_v2_xxx::handle::mode::append</a></div><div class="ttdoc">All mainstream OSs and CIFS guarantee this is atomic with respect to all other appenders (FILE_APPEND...</div></div>
</div><!-- fragment -->
@@ -786,8 +823,8 @@ For portability, you can only assume that barriers write order for a single hand
</div>
</div>
-<a id="a23d7f6342dead9266633176cd578714d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a23d7f6342dead9266633176cd578714d">&#9670;&nbsp;</a></span>lock() <span class="overload">[1/3]</span></h2>
+<a id="a3b27d0f83fb72ebaa1e6a2eead9bec3e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3b27d0f83fb72ebaa1e6a2eead9bec3e">&#9670;&nbsp;</a></span>lock_range() <span class="overload">[1/3]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -796,7 +833,7 @@ For portability, you can only assume that barriers write order for a single hand
<td class="mlabels-left">
<table class="memname">
<tr>
- <td class="memname">virtual result&lt;<a class="el" href="classllfio__v2__xxx_1_1io__handle_1_1extent__guard.html">extent_guard</a>&gt; llfio_v2_xxx::fast_random_file_handle::lock </td>
+ <td class="memname">virtual result&lt;<a class="el" href="classllfio__v2__xxx_1_1file__handle_1_1extent__guard.html">extent_guard</a>&gt; llfio_v2_xxx::fast_random_file_handle::lock_range </td>
<td>(</td>
<td class="paramtype">extent_type&#160;</td>
<td class="paramname"><em>offset</em>, </td>
@@ -810,8 +847,8 @@ For portability, you can only assume that barriers write order for a single hand
<tr>
<td class="paramkey"></td>
<td></td>
- <td class="paramtype">bool&#160;</td>
- <td class="paramname"><em>exclusive</em> = <code>true</code>, </td>
+ <td class="paramtype"><a class="el" href="classllfio__v2__xxx_1_1file__handle.html#aa25e3ab298152166fc387d8fcfb19a63">lock_kind</a>&#160;</td>
+ <td class="paramname"><em>kind</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
@@ -832,19 +869,19 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
-<p>Tries to lock the range of bytes specified for shared or exclusive access. Be aware this passes through the same semantics as the underlying OS call, including any POSIX insanity present on your platform: </p>
+<p>EXTENSION: Tries to lock the range of bytes specified for shared or exclusive access. Be aware this passes through the same semantics as the underlying OS call, including any POSIX insanity present on your platform: </p>
<ul>
<li>Any fd closed on an inode must release all byte range locks on that inode for all other fds. If your OS isn't new enough to support the non-insane lock API, <code>flag::byte_lock_insanity</code> will be set in flags() after the first call to this function.</li>
<li>Threads replace each other's locks, indeed locks replace each other's locks.</li>
</ul>
-<p>You almost cetainly should use your choice of an <code>algorithm::shared_fs_mutex::*</code> instead of this as those are more portable and performant.</p>
+<p>You almost cetainly should use your choice of an <code>algorithm::shared_fs_mutex::*</code> instead of this as those are more portable and performant, or use the <code>SharedMutex</code> modelling member functions which lock the whole inode for exclusive or shared access.</p>
<dl class="section warning"><dt>Warning</dt><dd>This is a low-level API which you should not use directly in portable code. Another issue is that atomic lock upgrade/downgrade, if your platform implements that (you should assume it does not in portable code), means that on POSIX you need to <em>release</em> the old <code>extent_guard</code> after creating a new one over the same byte range, otherwise the old <code>extent_guard</code>'s destructor will simply unlock the range entirely. On Windows however upgrade/downgrade locks overlay, so on that platform you must <em>not</em> release the old <code>extent_guard</code>. Look into <code>algorithm::shared_fs_mutex::safe_byte_ranges</code> for a portable solution.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An extent guard, the destruction of which will call unlock(). </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">offset</td><td>The offset to lock. Note that on POSIX the top bit is always cleared before use as POSIX uses signed transport for offsets. If you want an advisory rather than mandatory lock on Windows, one technique is to force top bit set so the region you lock is not the one you will i/o - obviously this reduces maximum file size to (2^63)-1. </td></tr>
- <tr><td class="paramname">bytes</td><td>The number of bytes to lock. Zero means lock the entire file using any more efficient alternative algorithm where available on your platform (specifically, on BSD and OS X use flock() for non-insane semantics). </td></tr>
- <tr><td class="paramname">exclusive</td><td>Whether the lock is to be exclusive. </td></tr>
+ <tr><td class="paramname">bytes</td><td>The number of bytes to lock. </td></tr>
+ <tr><td class="paramname">kind</td><td>Whether the lock is to be shared or exclusive. </td></tr>
<tr><td class="paramname">d</td><td>An optional deadline by which the lock must complete, else it is cancelled. </td></tr>
</table>
</dd>
@@ -852,12 +889,12 @@ For portability, you can only assume that barriers write order for a single hand
<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values POSIX fcntl() can return, <code>errc::timed_out</code>, <code>errc::not_supported</code> may be returned if deadline i/o is not possible with this particular handle configuration (e.g. non-overlapped HANDLE on Windows). </dd></dl>
<dl class="section user"><dt>Memory Allocations</dt><dd>The default synchronous implementation in file_handle performs no memory allocation. The asynchronous implementation in async_file_handle performs one calloc and one free. </dd></dl>
-<p>Reimplemented from <a class="el" href="classllfio__v2__xxx_1_1io__handle.html#a29cc9f2525f78dd73f8402cb59d97212">llfio_v2_xxx::io_handle</a>.</p>
-<div class="fragment"><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; {</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="comment">// Lock nothing</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">return</span> _extent_guard(<span class="keyword">this</span>, offset, bytes, exclusive);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; }</div></div><!-- fragment -->
+<p>Reimplemented from <a class="el" href="classllfio__v2__xxx_1_1file__handle.html#a5a9910116cc5751398e6b55f06a9a793">llfio_v2_xxx::file_handle</a>.</p>
+<div class="fragment"><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; {</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="comment">// Lock nothing</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordflow">return</span> _extent_guard(<span class="keyword">this</span>, offset, bytes, kind);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; }</div></div><!-- fragment -->
</div>
</div>
-<a id="a369f8ec6a682030f8e7f5749eb7bc77e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a369f8ec6a682030f8e7f5749eb7bc77e">&#9670;&nbsp;</a></span>lock() <span class="overload">[2/3]</span></h2>
+<a id="a3c5c229b11f488d0e9bff74c65737db2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3c5c229b11f488d0e9bff74c65737db2">&#9670;&nbsp;</a></span>lock_range() <span class="overload">[2/3]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -866,9 +903,9 @@ For portability, you can only assume that barriers write order for a single hand
<td class="mlabels-left">
<table class="memname">
<tr>
- <td class="memname">result&lt;<a class="el" href="classllfio__v2__xxx_1_1io__handle_1_1extent__guard.html">extent_guard</a>&gt; llfio_v2_xxx::io_handle::lock </td>
+ <td class="memname">result&lt;<a class="el" href="classllfio__v2__xxx_1_1file__handle_1_1extent__guard.html">extent_guard</a>&gt; llfio_v2_xxx::file_handle::lock_range </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="structllfio__v2__xxx_1_1io__handle_1_1io__request.html">io_request</a>&lt; <a class="el" href="classllfio__v2__xxx_1_1io__handle.html#a8f525d9665b524442b46cd55678817ed">buffers_type</a> &gt;&#160;</td>
+ <td class="paramtype"><a class="el" href="structllfio__v2__xxx_1_1io__handle_1_1io__request.html">io_request</a>&lt; buffers_type &gt;&#160;</td>
<td class="paramname"><em>reqs</em>, </td>
</tr>
<tr>
@@ -890,12 +927,13 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; {</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; {</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">if</span>(bytes + i.size() &lt; bytes)</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; {</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordflow">return</span> errc::value_too_large;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; }</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; bytes += i.size();</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; }</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classllfio__v2__xxx_1_1io__handle.html#a29cc9f2525f78dd73f8402cb59d97212">lock</a>(reqs.offset, bytes, <span class="keyword">false</span>, d);</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; }</div><div class="ttc" id="classllfio__v2__xxx_1_1io__handle_html_a29cc9f2525f78dd73f8402cb59d97212"><div class="ttname"><a href="classllfio__v2__xxx_1_1io__handle.html#a29cc9f2525f78dd73f8402cb59d97212">llfio_v2_xxx::io_handle::lock</a></div><div class="ttdeci">virtual result&lt; extent_guard &gt; lock(extent_type offset, extent_type bytes, bool exclusive=true, deadline d=deadline()) noexcept</div><div class="ttdoc">Tries to lock the range of bytes specified for shared or exclusive access. Be aware this passes throu...</div></div>
+<div class="fragment"><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; {</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; {</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keywordflow">if</span>(bytes + i.size() &lt; bytes)</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; {</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keywordflow">return</span> errc::value_too_large;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; }</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; bytes += i.size();</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; }</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classllfio__v2__xxx_1_1file__handle.html#a5a9910116cc5751398e6b55f06a9a793">lock_range</a>(reqs.offset, bytes, <a class="code" href="classllfio__v2__xxx_1_1file__handle.html#aa25e3ab298152166fc387d8fcfb19a63a9e81e7b963c71363e2fb3eefcfecfc0e">lock_kind::shared</a>, d);</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; }</div><div class="ttc" id="classllfio__v2__xxx_1_1file__handle_html_aa25e3ab298152166fc387d8fcfb19a63a9e81e7b963c71363e2fb3eefcfecfc0e"><div class="ttname"><a href="classllfio__v2__xxx_1_1file__handle.html#aa25e3ab298152166fc387d8fcfb19a63a9e81e7b963c71363e2fb3eefcfecfc0e">llfio_v2_xxx::file_handle::lock_kind::shared</a></div><div class="ttdoc">Exclude only those requesting an exclusive lock on the same inode. </div></div>
+<div class="ttc" id="classllfio__v2__xxx_1_1file__handle_html_a5a9910116cc5751398e6b55f06a9a793"><div class="ttname"><a href="classllfio__v2__xxx_1_1file__handle.html#a5a9910116cc5751398e6b55f06a9a793">llfio_v2_xxx::file_handle::lock_range</a></div><div class="ttdeci">virtual result&lt; extent_guard &gt; lock_range(extent_type offset, extent_type bytes, lock_kind kind, deadline d=deadline()) noexcept</div><div class="ttdoc">EXTENSION: Tries to lock the range of bytes specified for shared or exclusive access. Be aware this passes through the same semantics as the underlying OS call, including any POSIX insanity present on your platform: </div></div>
</div><!-- fragment -->
</div>
</div>
-<a id="a198e1c294966a28919d2f0698e3608b8"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a198e1c294966a28919d2f0698e3608b8">&#9670;&nbsp;</a></span>lock() <span class="overload">[3/3]</span></h2>
+<a id="a4055bb02680af02dcc189f0461bad503"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4055bb02680af02dcc189f0461bad503">&#9670;&nbsp;</a></span>lock_range() <span class="overload">[3/3]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -904,9 +942,9 @@ For portability, you can only assume that barriers write order for a single hand
<td class="mlabels-left">
<table class="memname">
<tr>
- <td class="memname">result&lt;<a class="el" href="classllfio__v2__xxx_1_1io__handle_1_1extent__guard.html">extent_guard</a>&gt; llfio_v2_xxx::io_handle::lock </td>
+ <td class="memname">result&lt;<a class="el" href="classllfio__v2__xxx_1_1file__handle_1_1extent__guard.html">extent_guard</a>&gt; llfio_v2_xxx::file_handle::lock_range </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="structllfio__v2__xxx_1_1io__handle_1_1io__request.html">io_request</a>&lt; <a class="el" href="classllfio__v2__xxx_1_1io__handle.html#a693a8c64bb7de1a6835d6a151e37aa0e">const_buffers_type</a> &gt;&#160;</td>
+ <td class="paramtype"><a class="el" href="structllfio__v2__xxx_1_1io__handle_1_1io__request.html">io_request</a>&lt; const_buffers_type &gt;&#160;</td>
<td class="paramname"><em>reqs</em>, </td>
</tr>
<tr>
@@ -928,7 +966,8 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; {</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; {</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="keywordflow">if</span>(bytes + i.size() &lt; bytes)</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; {</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="keywordflow">return</span> errc::value_too_large;</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; }</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; bytes += i.size();</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; }</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classllfio__v2__xxx_1_1io__handle.html#a29cc9f2525f78dd73f8402cb59d97212">lock</a>(reqs.offset, bytes, <span class="keyword">true</span>, d);</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; }</div><div class="ttc" id="classllfio__v2__xxx_1_1io__handle_html_a29cc9f2525f78dd73f8402cb59d97212"><div class="ttname"><a href="classllfio__v2__xxx_1_1io__handle.html#a29cc9f2525f78dd73f8402cb59d97212">llfio_v2_xxx::io_handle::lock</a></div><div class="ttdeci">virtual result&lt; extent_guard &gt; lock(extent_type offset, extent_type bytes, bool exclusive=true, deadline d=deadline()) noexcept</div><div class="ttdoc">Tries to lock the range of bytes specified for shared or exclusive access. Be aware this passes throu...</div></div>
+<div class="fragment"><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; {</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordtype">size_t</span> bytes = 0;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : reqs.buffers)</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; {</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keywordflow">if</span>(bytes + i.size() &lt; bytes)</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; {</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">return</span> errc::value_too_large;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; }</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; bytes += i.size();</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; }</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classllfio__v2__xxx_1_1file__handle.html#a5a9910116cc5751398e6b55f06a9a793">lock_range</a>(reqs.offset, bytes, <a class="code" href="classllfio__v2__xxx_1_1file__handle.html#aa25e3ab298152166fc387d8fcfb19a63aa4293995cfbfa9ce60ce71ade2ff75f7">lock_kind::exclusive</a>, d);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; }</div><div class="ttc" id="classllfio__v2__xxx_1_1file__handle_html_aa25e3ab298152166fc387d8fcfb19a63aa4293995cfbfa9ce60ce71ade2ff75f7"><div class="ttname"><a href="classllfio__v2__xxx_1_1file__handle.html#aa25e3ab298152166fc387d8fcfb19a63aa4293995cfbfa9ce60ce71ade2ff75f7">llfio_v2_xxx::file_handle::lock_kind::exclusive</a></div><div class="ttdoc">Exclude those requesting any kind of lock on the same inode. </div></div>
+<div class="ttc" id="classllfio__v2__xxx_1_1file__handle_html_a5a9910116cc5751398e6b55f06a9a793"><div class="ttname"><a href="classllfio__v2__xxx_1_1file__handle.html#a5a9910116cc5751398e6b55f06a9a793">llfio_v2_xxx::file_handle::lock_range</a></div><div class="ttdeci">virtual result&lt; extent_guard &gt; lock_range(extent_type offset, extent_type bytes, lock_kind kind, deadline d=deadline()) noexcept</div><div class="ttdoc">EXTENSION: Tries to lock the range of bytes specified for shared or exclusive access. Be aware this passes through the same semantics as the underlying OS call, including any POSIX insanity present on your platform: </div></div>
</div><!-- fragment -->
</div>
</div>
@@ -1085,7 +1124,7 @@ For portability, you can only assume that barriers write order for a single hand
</div><div class="memdoc">
<p>Create a file handle creating a randomly named file on a path. The file is opened exclusively with <code>creation::only_if_not_exist</code> so it will never collide with nor overwrite any existing file. Note also that caching defaults to temporary which hints to the OS to only flush changes to physical storage as lately as possible.</p>
<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values POSIX open() or CreateFile() can return. </dd></dl>
-<div class="fragment"><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">try</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">for</span>(;;)</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keyword">auto</span> randomname = <a class="code" href="namespacellfio__v2__xxx_1_1utils.html#a6a29cf29a4b097411f6c1e5274bfb417">utils::random_string</a>(32);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; randomname.append(<span class="stringliteral">&quot;.random&quot;</span>);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; result&lt;file_handle&gt; ret = <a class="code" href="classllfio__v2__xxx_1_1file__handle.html#a09e6b3e9806b328a687a55e955b885a3">file</a>(dirpath, randomname, _mode, <a class="code" href="classllfio__v2__xxx_1_1handle.html#af0b352d0f273ba6fa70c178b2c2fee42abba3bc579480e6c94ecd81b7b5923255">creation::only_if_not_exist</a>, _caching, <a class="code" href="classllfio__v2__xxx_1_1handle.html#a013936bc1254b1a47567fe29698d1b1c">flags</a>);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">if</span>(ret || (!ret &amp;&amp; ret.error() != errc::file_exists))</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; {</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; }</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">catch</span>(...)</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">return</span> error_from_exception();</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; }</div><div class="ttc" id="classllfio__v2__xxx_1_1file__handle_html_a09e6b3e9806b328a687a55e955b885a3"><div class="ttname"><a href="classllfio__v2__xxx_1_1file__handle.html#a09e6b3e9806b328a687a55e955b885a3">llfio_v2_xxx::file_handle::file</a></div><div class="ttdeci">static result&lt; file_handle &gt; file(const path_handle &amp;base, path_view_type path, mode _mode=mode::read, creation _creation=creation::open_existing, caching _caching=caching::all, flag flags=flag::none) noexcept</div></div>
+<div class="fragment"><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">try</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">for</span>(;;)</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keyword">auto</span> randomname = <a class="code" href="namespacellfio__v2__xxx_1_1utils.html#a6a29cf29a4b097411f6c1e5274bfb417">utils::random_string</a>(32);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; randomname.append(<span class="stringliteral">&quot;.random&quot;</span>);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; result&lt;file_handle&gt; ret = <a class="code" href="classllfio__v2__xxx_1_1file__handle.html#a09e6b3e9806b328a687a55e955b885a3">file</a>(dirpath, randomname, _mode, <a class="code" href="classllfio__v2__xxx_1_1handle.html#af0b352d0f273ba6fa70c178b2c2fee42abba3bc579480e6c94ecd81b7b5923255">creation::only_if_not_exist</a>, _caching, <a class="code" href="classllfio__v2__xxx_1_1handle.html#a013936bc1254b1a47567fe29698d1b1c">flags</a>);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">if</span>(ret || (!ret &amp;&amp; ret.error() != errc::file_exists))</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; {</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">catch</span>(...)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">return</span> error_from_exception();</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div><div class="ttc" id="classllfio__v2__xxx_1_1file__handle_html_a09e6b3e9806b328a687a55e955b885a3"><div class="ttname"><a href="classllfio__v2__xxx_1_1file__handle.html#a09e6b3e9806b328a687a55e955b885a3">llfio_v2_xxx::file_handle::file</a></div><div class="ttdeci">static result&lt; file_handle &gt; file(const path_handle &amp;base, path_view_type path, mode _mode=mode::read, creation _creation=creation::open_existing, caching _caching=caching::all, flag flags=flag::none) noexcept</div></div>
<div class="ttc" id="classllfio__v2__xxx_1_1handle_html_a013936bc1254b1a47567fe29698d1b1c"><div class="ttname"><a href="classllfio__v2__xxx_1_1handle.html#a013936bc1254b1a47567fe29698d1b1c">llfio_v2_xxx::handle::flags</a></div><div class="ttdeci">flag flags() const noexcept</div><div class="ttdoc">The flags this handle was opened with. </div><div class="ttdef"><b>Definition:</b> handle.hpp:335</div></div>
<div class="ttc" id="classllfio__v2__xxx_1_1handle_html_af0b352d0f273ba6fa70c178b2c2fee42abba3bc579480e6c94ecd81b7b5923255"><div class="ttname"><a href="classllfio__v2__xxx_1_1handle.html#af0b352d0f273ba6fa70c178b2c2fee42abba3bc579480e6c94ecd81b7b5923255">llfio_v2_xxx::handle::creation::only_if_not_exist</a></div><div class="ttdoc">Filesystem entry must NOT exist, and is atomically created by the success of this operation...</div></div>
<div class="ttc" id="namespacellfio__v2__xxx_1_1utils_html_a6a29cf29a4b097411f6c1e5274bfb417"><div class="ttname"><a href="namespacellfio__v2__xxx_1_1utils.html#a6a29cf29a4b097411f6c1e5274bfb417">llfio_v2_xxx::utils::random_string</a></div><div class="ttdeci">std::string random_string(size_t randomlen)</div><div class="ttdoc">Returns a cryptographically random string capable of being used as a filename. Essentially random_fil...</div><div class="ttdef"><b>Definition:</b> utils.hpp:134</div></div>
@@ -1275,7 +1314,8 @@ For portability, you can only assume that barriers write order for a single hand
</tr>
</table>
</div><div class="memdoc">
-<p>Changes whether this handle is append only or not.</p>
+
+<p>EXTENSION: Changes whether this handle is append only or not. </p>
<dl class="section warning"><dt>Warning</dt><dd>On Windows this is implemented as a bit of a hack to make it fast like on POSIX, so make sure you open the handle for read/write originally. Note unlike on POSIX the append_only disposition will be the only one toggled, seekable and readable will remain turned on.</dd></dl>
<dl class="section user"><dt>Errors returnable</dt><dd>Whatever POSIX fcntl() returns. On Windows nothing is changed on the handle. </dd></dl>
<dl class="section user"><dt>Memory Allocations</dt><dd>No memory allocation. </dd></dl>
@@ -1336,9 +1376,9 @@ For portability, you can only assume that barriers write order for a single hand
<p>Create a file handle creating the named file on some path which the OS declares to be suitable for temporary files. Most OSs are very lazy about flushing changes made to these temporary files. Note the default flags are to have the newly created file deleted on first handle close. Note also that an empty name is equivalent to calling <code>random_file(path_discovery::storage_backed_temporary_files_directory())</code> and the creation parameter is ignored.</p>
<dl class="section note"><dt>Note</dt><dd>If the temporary file you are creating is not going to have its path sent to another process for usage, this is the WRONG function to use. Use <code>temp_inode()</code> instead, it is far more secure.</dd></dl>
<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values POSIX open() or CreateFile() can return. </dd></dl>
-<div class="fragment"><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; {</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keyword">auto</span> &amp;tempdirh = <a class="code" href="namespacellfio__v2__xxx_1_1path__discovery.html#a2dd74ea752f3f511d58ccccdcac7f4fd">path_discovery::storage_backed_temporary_files_directory</a>();</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">return</span> name.empty() ? <a class="code" href="classllfio__v2__xxx_1_1file__handle.html#a3141a85996e46a3cc6b238d321198e47">random_file</a>(tempdirh, _mode, _caching, <a class="code" href="classllfio__v2__xxx_1_1handle.html#a013936bc1254b1a47567fe29698d1b1c">flags</a>) : <a class="code" href="classllfio__v2__xxx_1_1file__handle.html#a09e6b3e9806b328a687a55e955b885a3">file</a>(tempdirh, name, _mode, _creation, _caching, <a class="code" href="classllfio__v2__xxx_1_1handle.html#a013936bc1254b1a47567fe29698d1b1c">flags</a>);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; }</div><div class="ttc" id="classllfio__v2__xxx_1_1file__handle_html_a09e6b3e9806b328a687a55e955b885a3"><div class="ttname"><a href="classllfio__v2__xxx_1_1file__handle.html#a09e6b3e9806b328a687a55e955b885a3">llfio_v2_xxx::file_handle::file</a></div><div class="ttdeci">static result&lt; file_handle &gt; file(const path_handle &amp;base, path_view_type path, mode _mode=mode::read, creation _creation=creation::open_existing, caching _caching=caching::all, flag flags=flag::none) noexcept</div></div>
+<div class="fragment"><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; {</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keyword">auto</span> &amp;tempdirh = <a class="code" href="namespacellfio__v2__xxx_1_1path__discovery.html#a2dd74ea752f3f511d58ccccdcac7f4fd">path_discovery::storage_backed_temporary_files_directory</a>();</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">return</span> name.empty() ? <a class="code" href="classllfio__v2__xxx_1_1file__handle.html#a3141a85996e46a3cc6b238d321198e47">random_file</a>(tempdirh, _mode, _caching, <a class="code" href="classllfio__v2__xxx_1_1handle.html#a013936bc1254b1a47567fe29698d1b1c">flags</a>) : <a class="code" href="classllfio__v2__xxx_1_1file__handle.html#a09e6b3e9806b328a687a55e955b885a3">file</a>(tempdirh, name, _mode, _creation, _caching, <a class="code" href="classllfio__v2__xxx_1_1handle.html#a013936bc1254b1a47567fe29698d1b1c">flags</a>);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; }</div><div class="ttc" id="classllfio__v2__xxx_1_1file__handle_html_a09e6b3e9806b328a687a55e955b885a3"><div class="ttname"><a href="classllfio__v2__xxx_1_1file__handle.html#a09e6b3e9806b328a687a55e955b885a3">llfio_v2_xxx::file_handle::file</a></div><div class="ttdeci">static result&lt; file_handle &gt; file(const path_handle &amp;base, path_view_type path, mode _mode=mode::read, creation _creation=creation::open_existing, caching _caching=caching::all, flag flags=flag::none) noexcept</div></div>
<div class="ttc" id="classllfio__v2__xxx_1_1handle_html_a013936bc1254b1a47567fe29698d1b1c"><div class="ttname"><a href="classllfio__v2__xxx_1_1handle.html#a013936bc1254b1a47567fe29698d1b1c">llfio_v2_xxx::handle::flags</a></div><div class="ttdeci">flag flags() const noexcept</div><div class="ttdoc">The flags this handle was opened with. </div><div class="ttdef"><b>Definition:</b> handle.hpp:335</div></div>
-<div class="ttc" id="classllfio__v2__xxx_1_1file__handle_html_a3141a85996e46a3cc6b238d321198e47"><div class="ttname"><a href="classllfio__v2__xxx_1_1file__handle.html#a3141a85996e46a3cc6b238d321198e47">llfio_v2_xxx::file_handle::random_file</a></div><div class="ttdeci">static result&lt; file_handle &gt; random_file(const path_handle &amp;dirpath, mode _mode=mode::write, caching _caching=caching::temporary, flag flags=flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> file_handle.hpp:135</div></div>
+<div class="ttc" id="classllfio__v2__xxx_1_1file__handle_html_a3141a85996e46a3cc6b238d321198e47"><div class="ttname"><a href="classllfio__v2__xxx_1_1file__handle.html#a3141a85996e46a3cc6b238d321198e47">llfio_v2_xxx::file_handle::random_file</a></div><div class="ttdeci">static result&lt; file_handle &gt; random_file(const path_handle &amp;dirpath, mode _mode=mode::write, caching _caching=caching::temporary, flag flags=flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> file_handle.hpp:143</div></div>
<div class="ttc" id="namespacellfio__v2__xxx_1_1path__discovery_html_a2dd74ea752f3f511d58ccccdcac7f4fd"><div class="ttname"><a href="namespacellfio__v2__xxx_1_1path__discovery.html#a2dd74ea752f3f511d58ccccdcac7f4fd">llfio_v2_xxx::path_discovery::storage_backed_temporary_files_directory</a></div><div class="ttdeci">const path_handle &amp; storage_backed_temporary_files_directory() noexcept</div><div class="ttdoc">Returns a reference to an open handle to a verified temporary directory where files created are store...</div></div>
</div><!-- fragment -->
</div>
@@ -1387,8 +1427,8 @@ For portability, you can only assume that barriers write order for a single hand
</div>
</div>
-<a id="ae1abb705dbe9890e103365bf7c61521e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae1abb705dbe9890e103365bf7c61521e">&#9670;&nbsp;</a></span>try_lock()</h2>
+<a id="a2919da8c2520240c4e65f18f68872fd0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2919da8c2520240c4e65f18f68872fd0">&#9670;&nbsp;</a></span>try_lock_range()</h2>
<div class="memitem">
<div class="memproto">
@@ -1397,22 +1437,22 @@ For portability, you can only assume that barriers write order for a single hand
<td class="mlabels-left">
<table class="memname">
<tr>
- <td class="memname">result&lt;<a class="el" href="classllfio__v2__xxx_1_1io__handle_1_1extent__guard.html">extent_guard</a>&gt; llfio_v2_xxx::io_handle::try_lock </td>
+ <td class="memname">result&lt;<a class="el" href="classllfio__v2__xxx_1_1file__handle_1_1extent__guard.html">extent_guard</a>&gt; llfio_v2_xxx::file_handle::try_lock_range </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="classllfio__v2__xxx_1_1handle.html#a4ee58f1b6a24af5e64d850d1e3eed07f">extent_type</a>&#160;</td>
+ <td class="paramtype">extent_type&#160;</td>
<td class="paramname"><em>offset</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
- <td class="paramtype"><a class="el" href="classllfio__v2__xxx_1_1handle.html#a4ee58f1b6a24af5e64d850d1e3eed07f">extent_type</a>&#160;</td>
+ <td class="paramtype">extent_type&#160;</td>
<td class="paramname"><em>bytes</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
- <td class="paramtype">bool&#160;</td>
- <td class="paramname"><em>exclusive</em> = <code>true</code>&#160;</td>
+ <td class="paramtype"><a class="el" href="classllfio__v2__xxx_1_1file__handle.html#aa25e3ab298152166fc387d8fcfb19a63">lock_kind</a>&#160;</td>
+ <td class="paramname"><em>kind</em>&#160;</td>
</tr>
<tr>
<td></td>
@@ -1427,7 +1467,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
-<div class="fragment"><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;{ <span class="keywordflow">return</span> <a class="code" href="classllfio__v2__xxx_1_1io__handle.html#a29cc9f2525f78dd73f8402cb59d97212">lock</a>(offset, bytes, exclusive, deadline(std::chrono::seconds(0))); }</div><div class="ttc" id="classllfio__v2__xxx_1_1io__handle_html_a29cc9f2525f78dd73f8402cb59d97212"><div class="ttname"><a href="classllfio__v2__xxx_1_1io__handle.html#a29cc9f2525f78dd73f8402cb59d97212">llfio_v2_xxx::io_handle::lock</a></div><div class="ttdeci">virtual result&lt; extent_guard &gt; lock(extent_type offset, extent_type bytes, bool exclusive=true, deadline d=deadline()) noexcept</div><div class="ttdoc">Tries to lock the range of bytes specified for shared or exclusive access. Be aware this passes throu...</div></div>
+<div class="fragment"><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;{ <span class="keywordflow">return</span> <a class="code" href="classllfio__v2__xxx_1_1file__handle.html#a5a9910116cc5751398e6b55f06a9a793">lock_range</a>(offset, bytes, kind, deadline(std::chrono::seconds(0))); }</div><div class="ttc" id="classllfio__v2__xxx_1_1file__handle_html_a5a9910116cc5751398e6b55f06a9a793"><div class="ttname"><a href="classllfio__v2__xxx_1_1file__handle.html#a5a9910116cc5751398e6b55f06a9a793">llfio_v2_xxx::file_handle::lock_range</a></div><div class="ttdeci">virtual result&lt; extent_guard &gt; lock_range(extent_type offset, extent_type bytes, lock_kind kind, deadline d=deadline()) noexcept</div><div class="ttdoc">EXTENSION: Tries to lock the range of bytes specified for shared or exclusive access. Be aware this passes through the same semantics as the underlying OS call, including any POSIX insanity present on your platform: </div></div>
</div><!-- fragment -->
</div>
</div>
@@ -1468,8 +1508,8 @@ For portability, you can only assume that barriers write order for a single hand
</div>
</div>
-<a id="a26e98e20ea5be1a930d00b0b6f709436"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a26e98e20ea5be1a930d00b0b6f709436">&#9670;&nbsp;</a></span>unlock()</h2>
+<a id="a0b20ae88c350702b39f41d8223f0b164"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0b20ae88c350702b39f41d8223f0b164">&#9670;&nbsp;</a></span>unlock_range()</h2>
<div class="memitem">
<div class="memproto">
@@ -1478,7 +1518,7 @@ For portability, you can only assume that barriers write order for a single hand
<td class="mlabels-left">
<table class="memname">
<tr>
- <td class="memname">virtual void llfio_v2_xxx::fast_random_file_handle::unlock </td>
+ <td class="memname">virtual void llfio_v2_xxx::fast_random_file_handle::unlock_range </td>
<td>(</td>
<td class="paramtype">extent_type&#160;</td>
<td class="paramname"><em>offset</em>, </td>
@@ -1502,7 +1542,7 @@ For portability, you can only assume that barriers write order for a single hand
</table>
</div><div class="memdoc">
-<p>Unlocks a byte range previously locked. </p>
+<p>EXTENSION: Unlocks a byte range previously locked. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">offset</td><td>The offset to unlock. This should be an offset previously locked. </td></tr>
@@ -1513,7 +1553,7 @@ For portability, you can only assume that barriers write order for a single hand
<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values POSIX fcntl() can return. </dd></dl>
<dl class="section user"><dt>Memory Allocations</dt><dd>None. </dd></dl>
-<p>Reimplemented from <a class="el" href="classllfio__v2__xxx_1_1io__handle.html#ad720c4c7f350fe06291534d1cbf2feb5">llfio_v2_xxx::io_handle</a>.</p>
+<p>Reimplemented from <a class="el" href="classllfio__v2__xxx_1_1file__handle.html#a0cd024de36cc7cb63d9189f45a9944e9">llfio_v2_xxx::file_handle</a>.</p>
<div class="fragment"><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// Unlock nothing</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; }</div></div><!-- fragment -->
</div>
</div>