concurrent: signal only when necessary