use f_lock.swap instead of boost::move, which requires boost ver >= 1.48