From: Yauheni A. <ea...@in...> - 2009-03-16 07:02:06
|
On Fri, 13 Mar 2009 10:59:43 +0300, Yauheni Akhotnikau <ea...@in...> wrote: > Такая вот неприятная ситуация. Мне кажется, что выйти из нее можно > следующим образом: > - сообщения msg_raw_package имеют атрибут "нельзя выбрасывать", но так же > они имеют специальный обработчик "постановки в переполненную очередь"; > - обработчик постановки сообщения msg_raw_package в переполненную очередь > отсылает сообщение msg_close_channel для принудительного канала. В таком подходе так же оказалось не все хорошо. В SObjectizer 4.4.0 генерация заявок и постановка заявок в очереди диспетчера выполняется на заблокированном ядре. Это означает, что если для сообщения назначен обработчик перегрузки и этот обработчик обратиться к send_msg, то на вызове send_msg возникнет тупиковая ситуация... :( Да и вообще, если существует понятие обработчика перегрузки для сообщения и этот обработчик может отсылать собственные сообщения, то вызовы подобных обработчиков могут стать причиной бесконечной рекурсии... :( ...Так что пока все идет к тому, что в SObjectizer 4.4.0-b7 будет только возможность тупо выбрасывать лишние сообщения из очереди при перегрузке. Без каких-либо прикладных обработчиков этого дела. Выбрасываться будут только те сообщения, которые пользователь специальным образом пометит. Например, вот так: SOL4_MSG_START(msg_my, a_my_agent_t::msg_my) ... SOL4_MSG_DISCARD_ON_OVERLOAD() SOL4_MSG_FINISH() -- Regards, Yauheni Akhotnikau Chief Developer Intervale, http://www.intervale.ru e-mail:ea...@in... <mailto:ea...@in...> |