Walsall took a 14th-minute lead when Jamie Paterson crossed and full-back Blair Adams turned the ball into his own net from 10 yards.
Carl Baker equalised in the 29th minute. The Coventry captain picked up a loose ball in the box and beat Aaron McCarey at his near post.
David McGoldrick notched his 14th goal of the season in the 39th minute as he finished off a good move involving Baker and James Bailey.
And League One's top scorer added another in the 41st minute. McGoldrick chested down Baker's cross and fired home from six yards - despite the best efforts of three Walsall defenders to keep it out.
Coventry full-back Cyrus Christie put the result beyond doubt in the 62nd minute, latching on to Baker's pass before cutting inside to fire through a sea of bodies into the corner of the net.
Walsall defender Andy Butler's miserable afternoon was cut short when he was sent off in the 81st minute for a second yellow card.
Baker made it five in the 84th minute when he fired in a left-footed shot into the bottom corner from 20 yards.