Petronas Sprinta rider John McPhee held off Lorenzo Dalla Porta to take his first Moto3 victory in three years at the French Grand Prix by just 0.106 seconds.
McPhee claimed the Petronas Sprinta team's debut pole, and battled hard in the last laps at Le Mans with Dalla Porta, Andrea Migno and Kaito Toba on his way to his first win since the 2016 Czech Grand Prix.
Tony Arbolino grabbed the holeshot at the start on the Team O Honda, with Tatsuki Suzuki following him through ahead of poleman McPhee.
Suzuki shoved his SIC58 Honda into the lead at La Chapelle seconds later, and ran at the head of the pack for the first eight laps, with McPhee dropping through to the back of the lead pack in seventh.
Migno led the charge on Suzuki on the eighth lap, and seized the lead through the fast right kink of Turn 2.
Suzuki scythed past the Bester Capital Dubai rider at the end of the tour at Turn 13, with Leopard's Dalla Porta moving into second before taking the lead two laps later at Turn 2.
The SIC58 rider forced Dalla Porta wide four corners later to reclaim the lead, though a mistake at Turn 7 dropped him to fourth, with the Leopard Honda taking over at the front.
McPhee made sure Dalla Porta's stinit at the front was brief, with Suzuki soon recovering to the lead again with seven laps remaining.
However, Suzuki crashed out at the Dunlop chicane on the following tour, Arbolino getting caught up in the Japanese rider's tumble.
McPhee, Dalla Porta and Migno traded the lead over the next few laps, with Kaito Toba on the Team Asia Honda creeping onto the victory battle.
Dalla Porta led onto the final lap, but was passed by McPhee into Turn 9 and fended off a retaliation from Dalla Porta to secure the Petronas Sprinta team's first grand prix victory.
Canet made an aggressive move on Toba at Turn 11 to complete the podium and take a 14-point lead in the standings, with Gabriel Rodrigo (Gresini) and Migno rounding out the top five.
Toba was sixth as a result of his last-lap tussle with Canet, while Celestino Vietti guided his VR46 KTM to seventh ahead of Kazuki Masaki (Skull Rider), Prustel GP's Jakub Kornfeil and Nieto's Raul Fernandez, who recovered from 20th on the grid after a penalty.
Last year's Le Mans winner Albert Arenas (Nieto) was 11th, with Jaume Masia (BCD) relegated to 12th following a 2.2s penalty for cutting the Dunlop chicane.
Front row starter Ai Ogura ran in the lead pack off the line, but crashed out at Turn 10 on the opening lap. His Team Asia Honda bounced back onto track, but the rest of the field managed to avoid it.
Romano Fenati (Team O) pulled out on lap nine due to experiencing too much pain in his ankle from a heavy fall in practice on Friday.