Manager Steven Pressley made one change to the side that beat Colchester last week, with new loan signing Matthew Pennington coming in to replace Aaron Phillips. Gary Madine started after his loan spell was extended until January.
Walsall came flying out of the traps and controlled the early stages. In the second minute an interception from Jack Finch stopped Ashley Grimes from having a free shot in the City penalty area.
The Saddlers continued to get forward and in the seventh minute a mistake from John Fleck allowed Walsall to counter, culminating in Romaine Sawyers blazing a shot over the bar.
City began to get back into it, with Reda Johnson leading by example. On 13 a thunderous header won back possession. He came down the left hand side on the overlap and whipped in a great cross, with Madine just missing out on a chance.
It was tough going on a dreadful pitch but link up play between Sawyers and Grimes saw James Baxendale shoot just wide for the visitors from 20 yards four minutes later.
An effort from Jordan Cook midway through the first half that went well wide underlined the visitors attacking intent and the Sky Blues had their backs to the wall.
There were City claims for a spot kick two minutes later as James Chambers pulled down Gary Madine, but the referee was unmoved. Play continued and Haynes went for a spectacular bicycle kick as the ball came in, but timed it wrong.
Ten minutes from the break, Michael Cain ran at the City defence and created a carbon copy of Baxendale's chance earlier, instead sending the ball past Ryan Allsop's left hand post.
Chances were hard to come by from each side, but O'Donnell had his first save to make in the Walsall goal on the stroke of half time. Frank Nouble put in a whipped cross and O'Brien directed it towards the near corner, but the Yorkshire keeper flung himself to his left to keep it out.
It was the last action of a first half that the visitors edged, but the Sky Blues were still well in the game heading into the second half.
The Saddlers began the second half in the way they ended the first. Four minutes in and Sawyers tested Allsop, who made a great save from his header, with Cook failing to turn home the rebound.
Madine nearly broke the deadlock against the run of play five minutes later in spectacular fashion. A 40 yard effort nearly caught O'Donnell out, as he scrambled the ball away for a corner.
A period of midfield stalemate ensued, as both teams looked to be defensively secure going into the last half an hour. James Maddison came on for Ryan Haynes in the 64th minute, as City looked to alter their attack.
A succession of corners from the Sky Blues put the Saddlers under threat and on the second one they nearly took the lead. The ball was cleared but Fleck hit a deflected 20-yard effort that was saved by O'Donnell.
A minute later and City went close again from another corner. This time Madine headed straight at the keeper from the penalty spot, and he headed just wide again when he was presented with another chance following the first attack.
As the game entered the final fifteen minutes both teams smelled blood, as the first goal became more and more important. Madine almost conjured up an opener when he raced on to a ball from Danny Swanson, his shot deflecting over the bar.
Simeon Jackson came on for City with eight minutes to go in place of Nouble, as manager Steven Pressley made his last attacking change.
In the 89th minute Walsall had consecutive corners, which City dealt with comfortably. Three minutes of time was indicated by the fourth official as both teams looked to snatch the game.
The visitors were piling more pressure on the City defence, but some stout defending from Andy Webster and Pennington kept the Saddlers at bay.
The final whistle ensured that both teams went away with a share of the spoils. City's next game comes in 11 days time when they travel to Ashton Gate to take on Bristol City in the Johnstone's Paint Trophy Area Semi-Final.
Referee: R. Clarke
Coventry City: Allsop (GK), Johnson, Webster, Martin, Pennington, Haynes (Swanson 64'), Finch, Fleck, O'Brien, Madine, Nouble (Jackson 83').
Subs: Burge, Di Kelly-Evans, Thomas, Swanson, Barton.
Walsall: O'Donnell (GK), Purkiss, Taylor, Downing, A Chambers, Sawyers, Baxendale (Manset 76'), Cain, J Chambers, Cook, Grimes (Forde 61').
Subs: O'Connor, Flanaghan, MacGillvray, Morris, Clifford.