<div dir="ltr">@Garret,<div><br></div><div>I purposely changed the variable names, so that they would be easier to understand,</div><div>as I did not want to confuse/make it hard for the readers with the names specific to the project.</div><div><br></div><div>I solved the problem by using a <b>mutex</b>: </div><div>but I am not sure if this is the right way to do it in Erlang or if there are better ways of doing the same?</div><div><br></div><div><div>myfunction(Value)-></div><div><br></div><div>Val2=iolist_to_binary([Value,"_P"]),</div><div><br></div><div>case pg2:get_members(Val2) of</div><div>        </div><div>        [] -></div><div><br></div><div>            case ets:lookup(myset,mylock) of</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>            </div><div><span class="Apple-tab-span" style="white-space:pre">   </span>            [{_,0}] -></div><div><span class="Apple-tab-span" style="white-space:pre">      </span>                    </div><div><span class="Apple-tab-span" style="white-space:pre">       </span>                    ets:insert(myset, {mylock, 1}),</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>            <span class="Apple-tab-span" style="white-space:pre">          </span>{ok,P}=mymodule:start_link(),</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>            <span class="Apple-tab-span" style="white-space:pre">          </span>pg2:join(Val2,P),</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>            <span class="Apple-tab-span" style="white-space:pre">          </span>ets:insert(myset, {mylock, 0}),</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>            <span class="Apple-tab-span" style="white-space:pre">          </span>gen_server:call(P,{push,Msg});</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>            </div><div><span class="Apple-tab-span" style="white-space:pre">   </span>            [{_,1}] -></div><div><span class="Apple-tab-span" style="white-space:pre">      </span>                    </div><div><span class="Apple-tab-span" style="white-space:pre">       </span>                    %try again</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>                    mymodule:myfunction(Value)</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>         end;</div><div><br></div><div>        Otherwise ->   </div><div>            </div><div>            [Px|_]=Otherwise,</div><div>            gen_server:call(Px,{push,Msg})</div><div>end.      </div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Aug 16, 2015 at 9:36 PM, Garrett Smith <span dir="ltr"><<a href="mailto:g@rre.tt" target="_blank">g@rre.tt</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Sun, Aug 16, 2015 at 8:37 AM, Edward Halls <<a href="mailto:ehalls@gmail.com">ehalls@gmail.com</a>> wrote:<br>
> Perhaps some better syntax highlighting can help you spot this in the<br>
> future.<br>
><br>
> A good ide will also tell you when there are unused variables.<br>
<br>
</span>Better programming conventions - in particular making the code say<br>
what's going on - is even better than a super intelligent IDE that<br>
tells you what's wrong as you're typing. I turn those helper features<br>
off. Or, I would if Emacs had them on by default.<br>
<span class=""><br>
> On 16 Aug 2015 2:22 pm, "Robert Raschke" <<a href="mailto:rtrlists@googlemail.com">rtrlists@googlemail.com</a>> wrote:<br>
>><br>
>> Could be the typo? Value2 vs Val2.<br>
>><br>
>> On Aug 16, 2015 12:44 PM, "avinash D'silva" <<a href="mailto:evnix.com@gmail.com">evnix.com@gmail.com</a>> wrote:<br>
>>><br>
>>> Hi,<br>
>>><br>
>>> I have these lines code:<br>
>>><br>
>>>  timer:apply_after(5*1000,mymodule,myfunction,[Value]),<br>
>>>  timer:apply_after(5*1000,mymodule,myfunction,[Value]),<br>
>>>  timer:apply_after(5*1000,mymodule,myfunction,[Value]),<br>
>>>  timer:apply_after(5*1000,mymodule,myfunction,[Value]),<br>
>>>  timer:apply_after(5*1000,mymodule,myfunction,[Value]),<br>
>>><br>
>>> "myfunction" looks like this:<br>
>>> myfunction(Value)-><br>
<br>
</span>This should be a function:<br>
<br>
>>> Val2=iolist_to_binary([Value,"_P"]),<br>
<br>
You're making a decision to add this suffix here? Why? A well named<br>
function will make that obvious.<br>
<br>
Any time you find yourself adding 2, 3, 4s to the end of a variable,<br>
stop. What's the actual name of the variable there? I mean, what is<br>
it? Use that.<br>
<br>
Oh, and "value" should be "term" here. Kidding of course - it's no<br>
doubt a value, but take advantage of the variable name. Just spend a<br>
moment and think about what that thing actually is in the context of<br>
your function/problem.<br>
<br>
I'd flatten this all out:<br>
<span class=""><br>
>>> case pg2:get_members(Value2) of<br>
>>><br>
>>>         [] -><br>
>>>             {ok,P}=mymodule:start_link(),<br>
>>>             pg2:join(Value2,P2),<br>
>>>             gen_server:call(P2,{push,Msg});<br>
>>>         Otherwise -><br>
>>>             [Px|_]=Otherwise,<br>
>>>             gen_server:call(Px,{push,Msg})<br>
>>>       end,<br>
<br>
</span>to be something like:<br>
<br>
   handle_members(members_for_xxx(XXX))<br>
<br>
I don't know what XXX is here (that's a bad name too) but it should make sense.<br>
<span class=""><br>
>>> the problem is instead of creating a single process of mymodule.<br>
>>> there are 5 processes, as time taken to register the process is more,<br>
<br>
</span>I didn't answer your question as I fixate on code clarity and it's an<br>
emotional blocker for me :)<br>
<div class="HOEnZb"><div class="h5">_______________________________________________<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" rel="noreferrer" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Powered B<span></span><span></span>y <a href="http://codologic.com" target="_blank">codologic</a></div>
</div>