use signalling instead of busy looping