Bristol City and Millwall were both denied by the woodwork as they fought out a goalless draw in a full-blooded Sky Bet Championship clash at Ashton Gate.
Joe Bryan hit the crossbar for the hosts in the second half before Millwall substitute Tom Elliott rattled a post with a header.
The visitors were worth at least a point and almost won it at the death when Frank Fielding saved well from another substitute, Fred Onyedinma, with Eros Pisano blocking the follow-up effort from George Saville.
Millwall were fast out of the blocks in the first half and spent the first five minutes camped in City's half.
Jed Wallace was off target with a couple of shots and Steve Morison volleyed over before having a header tipped over by Fielding.
City, who had begun their previous two home games on fire, were knocked out of their stride and took time to settle.
They still had not created a clear chance when Fielding did well to advance to the edge of his area to rob Lee Gregory.
Jamie Paterson was looking the biggest threat for the hosts, but was frustrated to see a couple of efforts blocked by some committed Millwall defending.
Bobby Reid had a 37th-minute penalty claim rejected by referee Darren England after being checked inside the box by Conor McLaughlin.
But Millwall continued to threaten and Josh Brownhill had a make a vital goal-saving challenge on Gregory to prevent him latching onto a Morison cross.
City went closest to a first-half goal in stoppage time when Famara Diedhiou just failed to get on the end of Brownhill's low cross from the right.
It was the hosts who began the second half on the front foot, Reid brilliantly turning his marker before unleashing a low shot from distance that was palmed around a post by Jordan Archer.
The resulting corner reached Pisano at the far post and his low effort was straight at Archer.
But as the half wore on Millwall began to threaten again and Fielding produced a fine diving save to his left to keep out a 70th-minute volley from Wallace.
City head coach Lee Johnson used all three substitutes, sending on Callum O'Dowda, Gary O'Neil and most recent recruit Cauley Woodrow in an effort to lift his team's performance.
It almost paid off on 74 minutes when Bryan interchanged passes with Reid and saw his right-footed drive from just inside the box crash against the crossbar.
Millwall boss Neil Harris almost came up with a telling substitution of his own on 80 minutes, sending on Shane Ferguson for Wallace.
Ferguson's first job was to take a free-kick from the right which Elliott headed against the far post. At the other end Woodrow had a low shot saved in a frantic finish.