anchor.diff:  %% Description: Handling call messages
   %% @hidden
   %%--------------------------------------------------------------------
  -handle_call({lock, ChannelId}, _From, State) ->
  -    Res = global:set_lock({ChannelId, node()}, [node()|nodes()], 0),
  -    {reply, Res, State};
  +handle_call({set_lock, ChannelId}, _From, State) ->
  +    Result =
  +    case ets:lookup(?MODULE, ChannelId) of
  +        [{ChannelId, true}] -> false;
  +        [] ->
  +            ets:insert(?MODULE, {ChannelId, true}),
  +            true
  +    end,
  +    {reply, Result, State};
   
   handle_call(_Msg, _From, State) ->
       {reply, {error, invalid_call}, State}.
  
positive.code: -export([start_link/0, init/1, handle_call/3, handle_cast/2, 
  	     handle_info/2, terminate/2, code_change/3]).
  
  -export([lock/1, clear_all/0]).
  
  -include_lib("logplex.hrl").
  
  %% API functions
  start_link() ->
      gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
  
  lock(ChannelId) when is_integer(ChannelId) ->
      gen_server:call(?MODULE, {lock, ChannelId}, 10000).
  
  clear_all() ->
      gen_server:cast(?MODULE, clear_all).
  
  %%====================================================================
  %% gen_server callbacks
  
negative.code: %% @hidden
  %%--------------------------------------------------------------------
  handle_cast(clear_all, State) ->
      ets:delete_all_objects(?MODULE),
      {noreply, State};
  
  handle_cast(_Msg, State) ->
  