fix: reg controller using semaphore instead of lock