That otherwise concludes our live text commentary from Ashton Gate. We'll see you soon!
- Williams volleyed Millwall level with 12 minutes to go
- Cooper turned the ball into his own net after Eliasson's cross
- Millwall's O'Brien stretchered off shortly after City opener
- City's Diedhiou closest to scoring in first half, heading against the bar
- Millwall remain in bottom three despite draw
- Lions still without an away win since April
There's still one more game left in this round of Championship fixtures - and it looks a decent one, too.
West Bromwich Albion host Brentford at the Hawthorns on Monday, with our live text coverage getting under way from 19:45 GMT.
Victory would lift the Baggies up to third, while the out-of-form Bees could really do with what would only be their second win under boss Thomas Frank.
- Copyright: .
Here's confirmation, then, that Millwall now find themselves in 22nd - level on points with Reading and Bolton Wanderers.
It's all very tight down at the bottom of the Championship. Well, with the exception of Ipswich Town, anyway.
Former Bristol City midfielder on BBC Radio BristolQuote Message: It wasn't a classic. After the equaliser Millwall put more and more bodies behind the ball, soaked up a lot of pressure and the game petered out into a draw. Bristol City have dropped two points there, for me.
Game over. It's an excellent point for Millwall, who soaked up long periods of pressure and had to come from 1-0 down to earn a point through Shaun Williams' volley.
But Bristol City substitute Marley Watkins is pulled up for a foul and surely the final whistle is about to come...
Still we play, still Bristol City push forward...
Eventually, Niclas Eliasson's cross is claimed by Millwall goalkeeper Jordan Archer and that could well be that.
Five minutes down, two to go. Bristol City are on the attack and are struggling to break through...
The corner is headed narrowly over the bar by Eros Pisano and now Jordan Archer is on the deck complaining he's injured.
After a bit of fussing about, he finally gets back to his feet under the nose of the referee and takes the goal-kick.
Bristol City win a corner - and visiting goalkeeper Jordan Archer, not too chuffed with the decision, boots the ball high into the stands and receives a yellow card.
Millwall manager Neil Harris brings defender Byron Webster on for forward Steve Morison.
They'll take a point, thank you very much.
Andreas Weimann comes off for Mo Eisa. How much stoppage time are we going to end up with?...
We're into the final minute. As it stands, Millwall are going to be earning a valuable point away from home.
Bristol City's players and fans appeal for a handball inside the Millwall box, but the referee isn't interested.
Time is ticking if Bristol City are to rouse themselves once more and find a winner - or, indeed, if Millwall are to complete the turnaround themselves.
Andreas Weimann threatens to put Bristol City back in front, finding a yard of space inside the area before drilling wide of the near post.
Meanwhile, there'll be a double change from the hosts - Callum O'Dowda and Marley Watkins replace Famara Diedhiou and Jamie Paterson.
Although it's not all good news for Shaun Williams, who injured himself in the process of scoring and will have to be replaced by Jem Karacan.
Ten minutes to go.
- Copyright: Rex Features
... And right on cue!
It's a terrific volley from Shaun Williams, sending a fierce strike past Niki Maenpaa from Steve Morison's touch down to pull Millwall level at Ashton Gate.
They've stayed in the contest and now they have their reward.
Gary Owers isn't wrong, you know. It's not been particularly fluid from Bristol City but, as it stands, they appear to be grinding it out.
Other than that Jed Wallace free-kick, there's not been a huge amount to shout about since the own goal.