Oh great, thanks!<br><br><div class="gmail_quote">On Mon, Oct 17, 2011 at 2:00 AM, Ulf Wiger <span dir="ltr"><<a href="mailto:ulf.wiger@erlang-solutions.com">ulf.wiger@erlang-solutions.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im"><br>
On 17 Oct 2011, at 08:45, Kostis Sagonas wrote:<br>
<br>
> On 10/17/11 09:40, Dan Gudmundsson wrote:<br>
>> This should be fixed now and thus safe to use now.<br>
><br>
> But doesn't the code below have an obvious race condition?<br>
><br>
> Kostis<br>
<br>
</div>Kostis,<br>
<br>
Those functions in the mnesia API only work when called from within a transaction, so the race condition is managed through implicit locking.<br>
<br>
BR,<br>
Ulf<br>
<div><div></div><div class="h5"><br>
<br>
><br>
>> On Sun, Oct 16, 2011 at 11:29 PM, Tristan Sloughter<br>
>> <<a href="mailto:tristan.sloughter@gmail.com">tristan.sloughter@gmail.com</a>>  wrote:<br>
>>> I wanted to make sure there was still no way to tell Mnesia to return an<br>
>>> error if it is given a record to write that has the same key as an object<br>
>>> already stored in the table.<br>
>>> Reading through the docs it looks like there is no way through configuration<br>
>>> but you must simply read and then write if its not there, like I found when<br>
>>> this was asked in 2004 on this mailing list:<br>
>>> insert(K,V) -><br>
>>>   fun() -><br>
>>>   case mnesia:wread(K) of<br>
>>>     [Exist] ->  {abort, Exist};<br>
>>>     _ ->  mnesia:write(V)<br>
>>>   end<br>
>>>   end.<br>
>>> Which doesn't seem safe, as Ulf points on in that<br>
>>> thread: <a href="http://erlang.org/pipermail/erlang-questions/2004-May/012307.html" target="_blank">http://erlang.org/pipermail/erlang-questions/2004-May/012307.html</a><br>
>>> As well as slow.<br>
>>> So I was hoping maybe in 2011 there is a better way to do this? :)<br>
>>> Thanks,<br>
>>> Tristan<br>
>>> _______________________________________________<br>
>>> erlang-questions mailing list<br>
>>> <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
>>> <a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
>>><br>
>>><br>
>> _______________________________________________<br>
>> erlang-questions mailing list<br>
>> <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
>> <a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
><br>
> _______________________________________________<br>
> erlang-questions mailing list<br>
> <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
> <a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br>
</div></div>Ulf Wiger, CTO, Erlang Solutions, Ltd.<br>
<a href="http://erlang-solutions.com" target="_blank">http://erlang-solutions.com</a><br>
<div><div></div><div class="h5"><br>
<br>
<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</div></div></blockquote></div><br>