Цитата(BAT @ Mar 9 2011, 23:48)

Процесс с более высоким приоритетом прерывает ожидающий сообщений из канала. ConsumersProcessMap соответственно указывает, что процесс в ожидании.
Не понял, как может быть прерван процесс, ожидающий сообщения - ведь и так находится в неактивном состоянии.
Цитата(BAT @ Mar 9 2011, 23:48)

Вот думаю, что делать. Добавить чистку ConsumersProcessMap во время POP из канала? Но получится идеологически неверно влезать в сорцы оси. Но и в своем коде менять принцип не хочется.
Там в коде в функции pop есть такой фрагмент:
Код
if(pool.get_count())
{
p->Timeout = 0;
item = pool.pop();
CheckWaiters(ProducersProcessMap);
return true;
}
if(ConsumersProcessMap & PrioTag) // waked up by timer when timeout expired
{ // or by OS::ForceWakeUpProcess()
p->Timeout = 0; // non-zero if waked up by ForceWakeUpProcess()
ClrPrioTag(ConsumersProcessMap, PrioTag); // remove current process from the wait map
return false;
}
Попробуйте поменять эти два if'а местами - должно порешать вашу проблему. Сейчас готовится новая версия, там как раз такой порядок проверки условий. Заодно узнаем, правильное это решение или нет.