[erlang-questions] dialyzer: possible race condition with insert after lookup
Joel Reymont
joelr1@REDACTED
Sun Oct 23 21:19:41 CEST 2011
What about this?
_ = case ets:lookup(stats, Key1) of
[{Key1, TS, latency, OldDelta}] ->
%% have timings, average
ets:insert(stats, [{Key1, TS, latency, (OldDelta + Delta) / 2}]);
_ ->
%% first timing, store
ets:insert(stats, [{Key1, now(), latency, Delta}])
end;
On Oct 23, 2011, at 8:00 PM, Ulf Wiger wrote:
>
> This might please Dialyzer (I haven't tried):
>
> bump(Key, Value) ->
> try ets:update_counter(stats, Key, {4, Value})
> catch
> error:_ ->
> ets:insert_new(stats, {Key, now(), count, 0}),
> ets:update_counter(stats, Key, {4, Value})
> end.
--------------------------------------------------------------------------
- for hire: mac osx device driver ninja, kernel extensions and usb drivers
---------------------+------------+---------------------------------------
http://wagerlabs.com | @wagerlabs | http://www.linkedin.com/in/joelreymont
---------------------+------------+---------------------------------------
More information about the erlang-questions
mailing list