Ported from cc7740ae770c52ac1f385aa25cfc143fe79c6b6e. (cherry picked from commit a5f0733461e6937d0397e2afdef73db15f748c61)