Ported from cf4e1b9e62ab987552eb676f7618ea085f12a751. (cherry picked from commit 6a1354b1fc14dfd549bd88f58aede0178f489415)