summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenoit Germain <b n t DOT g e r m a i n AT g m a i l DOT c o m>2017-08-01 09:40:44 +0200
committerBenoit Germain <b n t DOT g e r m a i n AT g m a i l DOT c o m>2017-08-01 09:40:44 +0200
commita69f1b73269d932cefe6fe5b2052d46e3eeb2a71 (patch)
treef00cc311f36ba712cf914b80a25b3e229e44138d
parent3ff7e3228abd6c234125345859f58d8e41259307 (diff)
downloadlanes-a69f1b73269d932cefe6fe5b2052d46e3eeb2a71.tar.gz
lanes-a69f1b73269d932cefe6fe5b2052d46e3eeb2a71.tar.bz2
lanes-a69f1b73269d932cefe6fe5b2052d46e3eeb2a71.zip
Fix for deep-aware modules
Don't crash when using a module that creates Lanes-compatible deep userdata. Added a sample deep-aware module.
-rw-r--r--index.html6
1 files changed, 3 insertions, 3 deletions
diff --git a/index.html b/index.html
index feee273..703fa69 100644
--- a/index.html
+++ b/index.html
@@ -70,7 +70,7 @@
70 </p> 70 </p>
71 71
72 <p> 72 <p>
73 This document was revised on 5-Jun-17, and applies to version <tt>3.11</tt>. 73 This document was revised on 1-Aug-17, and applies to version <tt>3.12</tt>.
74 </p> 74 </p>
75 </font> 75 </font>
76 </center> 76 </center>
@@ -1527,9 +1527,9 @@ events to a common Linda, but... :).</font>
1527 <li><tt>eDO_metatable</tt>: should build a metatable for the object. Don't cache the metatable yourself, Lanes takes care of it (<tt>eDO_metatable</tt> should only be invoked once per state). Push the metatable on the stack, then call <tt>luaG_pushdeepversion()</tt> before returning (new in version 3.9.5).</li> 1527 <li><tt>eDO_metatable</tt>: should build a metatable for the object. Don't cache the metatable yourself, Lanes takes care of it (<tt>eDO_metatable</tt> should only be invoked once per state). Push the metatable on the stack, then call <tt>luaG_pushdeepversion()</tt> before returning (new in version 3.9.5).</li>
1528 <li><tt>eDO_module</tt>: requests the name of the module that exports the idfunc, to be returned. It is necessary so that Lanes can require it in any lane state that receives a userdata. This is to prevent crashes in situations where the module could be unloaded while the idfunc pointer is still held.</li> 1528 <li><tt>eDO_module</tt>: requests the name of the module that exports the idfunc, to be returned. It is necessary so that Lanes can require it in any lane state that receives a userdata. This is to prevent crashes in situations where the module could be unloaded while the idfunc pointer is still held.</li>
1529 </ul> 1529 </ul>
1530 Take a look at <tt>linda_id</tt> in <tt>lanes.c</tt>. 1530 Take a look at <tt>linda_id</tt> in <tt>lanes.c</tt> or <tt>deep_test_id</tt> in <tt>deep_test.c</tt>.
1531 </li> 1531 </li>
1532 <li>Include <tt>"deep.h"</tt> and either link against Lanes or statically compile deep.c into your module if you want to avoid a runtime dependency for users that will use your module without Lanes. 1532 <li>Include <tt>"deep.h"</tt> and either link against Lanes or statically compile <tt>deep.c</tt> and <tt>universe.c</tt> into your module if you want to avoid a runtime dependency for users that will use your module without Lanes.
1533 <li>Instanciate your userdata using <tt>luaG_newdeepuserdata()</tt>, instead of the regular <tt>lua_newuserdata()</tt>. Given an <tt>idfunc</tt>, it sets up the support structures and returns a state-specific proxy userdata for accessing your data. This proxy can also be copied over to other lanes.</li> 1533 <li>Instanciate your userdata using <tt>luaG_newdeepuserdata()</tt>, instead of the regular <tt>lua_newuserdata()</tt>. Given an <tt>idfunc</tt>, it sets up the support structures and returns a state-specific proxy userdata for accessing your data. This proxy can also be copied over to other lanes.</li>
1534 <li>Accessing the deep userdata from your C code, use <tt>luaG_todeep()</tt> instead of the regular <tt>lua_touserdata()</tt>.</li> 1534 <li>Accessing the deep userdata from your C code, use <tt>luaG_todeep()</tt> instead of the regular <tt>lua_touserdata()</tt>.</li>
1535</ol> 1535</ol>