[ros-dev] RE: [ros-diffs] [CVS reactos] fix broken work item impl.

Gunnar Dalsnes hardon at online.no
Wed Nov 17 00:53:55 CET 2004


> you have changed the semaphore to a synchronisation event. If all worker
threads have a job and there are
> put more than one new job in the queue, only one of the jobs is delivered
to the workers. The first empty
> worker removes one job. The event is never signaled again. All other jobs
are never delivered to the
> workers. 

I don't understand how you are thinking. 

SyncronizationEvent = AutoResetEvent. It shouldn't be possible for a work
item not to be delivered. If any worker threads are allready running, the
ExInterlockedRemoveHeadList loop will execute the work item. If any thread
is waiting on the event, it will be woken. We/I could examine a more
detailed scenario if you want.

> Compiling ros on ros isn't the real problem. I use three pc for testing.
On two pc I can compile
> ros on ros without any problems. The third pc is a smp machine. On my
third pc, the problem is somewhere in
> the smp code (and in many of my not commited changes).    

The new tcpip.sys generates lots of work items, and while compiling
ros-on-ros it bsod'd for me with STATUS_SEMAPHORE_LIMIT_EXCEEDED exception.
If you look at the old code, this can easily happend if the worker threads
are busy looping and dequeing items, without ever entering the wait.




More information about the Ros-dev mailing list