<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Maybe you just want to kill it ?<div><br></div><div>exit(Pid, die_now). </div><div><br></div><div>or if the little bugger is trapping exit you may have to be brutal.</div><div><br></div><div>exit(Pid, kill).</div><div><br></div><div><a href="http://www.erlang.org/doc/man/erlang.html#exit-2">http://www.erlang.org/doc/man/erlang.html#exit-2</a></div><div><br></div><div><br></div><div>You can send the process normal messages:</div><div><br></div><div>Pid ! stop_processing_now.</div><div><br></div><div>Then while doing processing loop:</div><div><br></div><div>check_records(State) -><br><span class="Apple-tab-span" style="white-space: pre; ">     </span>do some work...</div><div><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>receive </div><div><span class="Apple-tab-span" style="white-space: pre; ">             </span>stop_processing_now -> {stop, normal, State};</div><div><span class="Apple-tab-span" style="white-space: pre; ">     </span>after 0 -></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>check_records(State)</div><div><span class="Apple-tab-span" style="white-space: pre; ">      </span>end</div><div><br></div></div><div>The after 0 make sure that the process will not wait for messages, also</div><div>the selective receive approach here will guarantee that messages to</div><div>the gen_server (call and casts etc) will stay where they are.</div><div><br></div><div>You may have to add a clause in handle_info to handle the case</div><div>where the message is receive by the gen_server dispatcher.</div><div><br></div><div>handle_info(stop_processing_now, State) -></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>Stop? or something</div><div><br></div><div><br></div><div>/Tony</div><div><br></div><div><br></div><div><br><div><div>On 8 nov 2013, at 10:43, Janos Hary <<a href="mailto:janos.n.hary@gmail.com">janos.n.hary@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">Sorry, I cannot see how could it work in Erlang.<br><br>I have a handle_info processing a large number of records:<br>handle_info(check, State) -><br><span class="Apple-tab-span" style="white-space:pre">     </span>check_records(State).<br><br>check_records(State) -><br><span class="Apple-tab-span" style="white-space:pre">       </span>do some work...<br><span class="Apple-tab-span" style="white-space:pre">   </span>case State#stop_flag of<br><span class="Apple-tab-span" style="white-space:pre">   </span><span class="Apple-tab-span" style="white-space:pre">    </span>true -><br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>{stop, normal, State};<br><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>_ -><br><span class="Apple-tab-span" style="white-space:pre">   </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>check_records(State)<br><span class="Apple-tab-span" style="white-space:pre">      </span>end.<br><br>The State in check_records cannot changed from another cast. I'm not even<br>sure that the cast will execute before check_records finishes.<br><br>Janos<br><br><br>-----Original Message-----<br>From: <a href="mailto:erlang-questions-bounces@erlang.org">erlang-questions-bounces@erlang.org</a><br>[mailto:erlang-<a href="mailto:questions-bounces@erlang.org">questions-bounces@erlang.org</a>] On Behalf Of Bengt Kleberg<br>Sent: Friday, November 08, 2013 9:28 AM<br>To: undisclosed-recipients:<br>Cc: <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>Subject: Re: [erlang-questions] Stopping gen_server during processing<br><br>These are my opinions, not hard facts.<br><br>Add a member to the gen_server state record that says that you are going to<br>stop when possible. Use a cast to set it to true when you want to stop. If<br>it is true and you can stop the gen_server, stop it.<br><br><br>bengt<br><br>On Fri, 2013-11-08 at 08:55 +0100, Janos Hary wrote:<br><blockquote type="cite">All,<br><br><br><br>I have a gen_server process which periodically processes new records <br>from a database. I use timer:send_after to schedule gathering and <br>processing new records. I can gracefully stop the gen_server when it <br>is waiting, but I need a way to stop it during processing. Of cause I <br>only want to stop it at certain points of the processing, for example <br>before starting to process the next record. I need to group the <br>records, so I cannot ask them one by one from the db.<br><br><br><br>What is the preferred way of doing this?<br><br><br><br>Thanks for your answers in advance.<br><br>Janos<br><br><br>_______________________________________________<br>erlang-questions mailing list<br><a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>http://erlang.org/mailman/listinfo/erlang-questions<br></blockquote><br>_______________________________________________<br>erlang-questions mailing list<br><a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>http://erlang.org/mailman/listinfo/erlang-questions<br><br>_______________________________________________<br>erlang-questions mailing list<br>erlang-questions@erlang.org<br>http://erlang.org/mailman/listinfo/erlang-questions<br></blockquote></div><br><div>
<span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px; "><div><span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Geneva, Arial, Helvetica, sans-serif; font-size: 12px; ">"Installing applications can lead to corruption over time. </span><span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Geneva, Arial, Helvetica, sans-serif; font-size: 12px; ">Applications gradually write over each other's libraries, partial upgrades occur, user and system errors happen, and minute changes may be unnoticeable and difficult to fix"</span></div><div><span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Geneva, Arial, Helvetica, sans-serif; font-size: 12px; "><br></span></div></span><br class="Apple-interchange-newline">
</div>
<br></div></body></html>