Match ends, Queens Park Rangers 1, Millwall 1.
Millwall face a last-day wait to preserve their Championship status despite earning a battling draw at QPR.
Scott Malone's injury-time equaliser cancelled out Charlie Austin's 77th-minute penalty, awarded for handball against Simeon Jackson.
The point edged Ian Holloway's side two clear of third-bottom Birmingham and one ahead of Doncaster.
Now a win against Bournemouth at the New Den on Saturday will guarantee their Championship survival.
That scenario is one that Millwall fans will accept gratefully given that they were seconds away from their future being out of their own control.
Had they not equalised, and had Doncaster not conceded twice in the final four minutes against Reading, Holloway's side would have been looking out anxiously for the result of Birmingham's game in hand against Wigan on Tuesday. A home win in that one would have left them in the bottom three.
Instead, Malone's shot was misjudged by goalkeeper Rob Green, the ball trundling into the net to earn Millwall a point.
That was reward for a competitive performance against a QPR side already secure in the play-offs.
Stefan Maierhofer and Lee Martin spurned openings before the latter left the field on a stretcher following a challenge involving Tom Carroll.
After that, Millwall were indebted to goalkeeper David Forde, who thwarted Niko Kranjcar, Austin, Ravel Morrison and Junior Hoilett.
However, the Irishman could not deny Austin his 17th of the season after Jackson, under pressure from Morrison, handled Hoilett's cross.
Holloway's side rallied late on, Shaun Williams cannoning a free-kick against the crossbar before Malone struck.
Millwall manager Ian Holloway on the penalty decision:
"I think handball should be deliberate. It might have hit his hand but was it in the box and was it deliberate?
"If there hadn't been a whistle, not one person behind that goal would have jumped up looking for a penalty - and I know this ground pretty well.
"But because it's Millwall it doesn't matter. How many times has that happened this year?"
QPR boss Harry Redknapp:
"When you're 1-0 up in the last minute you expect to see the game out.
"It's difficult to balance a team and maybe we had too many players who are good when they have the ball and not so good when they haven't got it.
"Wigan lost which means we know we're going to be at home for the second leg [of the play-offs] and that's what we wanted."
- 15OnuohaBooked at 85mins
- 35BenayounSubstituted forHoilettat 63'minutes
- 9AustinSubstituted forDoyleat 84'minutes
- 19KranjcarSubstituted forZamoraat 74'minutes
- 1FordeBooked at 78mins
- 16BeeversBooked at 60mins
- 13MartinSubstituted forMorisonat 16'minutesBooked at 90mins
- 42MaierhoferSubstituted forJacksonat 53'minutes
- 29GarvanSubstituted forMcDonaldat 65'minutes
- Kevin Friend
- Shots on Target
Second Half ends, Queens Park Rangers 1, Millwall 1.
Corner, Queens Park Rangers. Conceded by Simeon Jackson.
Ravel Morrison (Queens Park Rangers) wins a free kick in the defensive half.
Foul by Shaun Williams (Millwall).
Tom Carroll (Queens Park Rangers) wins a free kick in the defensive half.
Foul by Steve Morison (Millwall).
Foul by Junior Hoilett (Queens Park Rangers).
Scott Malone (Millwall) wins a free kick in the defensive half.
Goal! Queens Park Rangers 1, Millwall 1. Scott Malone (Millwall) left footed shot from the centre of the box to the top left corner.
Alan Dunne (Millwall) wins a free kick in the defensive half.
Foul by Kevin Doyle (Queens Park Rangers).
Alan Dunne (Millwall) wins a free kick in the attacking half.
Foul by Bobby Zamora (Queens Park Rangers).
Attempt blocked. Martyn Woolford (Millwall) right footed shot from outside the box is blocked.
Attempt blocked. Shaun Williams (Millwall) left footed shot from outside the box is blocked.
Offside, Queens Park Rangers. Bobby Zamora tries a through ball, but Kevin Doyle is caught offside.
Attempt saved. Shaun Williams (Millwall) left footed shot from outside the box is saved in the top right corner.
Mark Beevers (Millwall) wins a free kick in the attacking half.
Foul by Richard Dunne (Queens Park Rangers).