ANAHEIM, Calif. (AP) — Kole Calhoun and Los Angeles Angels manager Mike Scioscia were surprised to find out just how long the right fielder's hitless streak really was, considering how good a second half of the season he's had.

On Sunday, Calhoun broke out of his 0-for-25 slump in a big way.

Calhoun hit a tiebreaking home run and Justin Upton homered in his third straight game as the Angels avoided a four-game sweep with a 4-3 victory over the Seattle Mariners.

"There were some good swings in there. You definitely feel it," Calhoun said of the hitless streak. "If you put a good swing on the ball you definitely feel like it should be a hit but sometimes it's not and that's just the game."

Calhoun's solo drive with two out in the seventh inning off reliever Nick Vincent (3-4) was his 19th home run.

"I didn't even realize it was (25) to be honest with you," Scioscia said. "He's been hitting the ball hard since he came back. Little surprised to hear it was 0-for-25. It was a good time for it and it was a big hit."

Calhoun also had a stint on the disabled list with a right oblique strain in June, but after a slow start to the season, he turned things around.

Upton extended his home run streak with a three-run shot in the third, giving the Angels a 3-1 lead. Upton has hit four home runs in his last three games. The homer was Upton's 30th of the season and marked his third consecutive season of at least 30 home runs.

Shohei Ohtani appeared to be limping as he jogged off the field in the eighth inning after he slid awkwardly into second base and was caught stealing.

"He tweaked his ankle a little bit, but you know I don't think there will be any issues with it," Scioscia said. "He slid a bit late and awkward. He'll be fine for Tuesday."

Taylor Cole (2-2) got the win, and Ty Buttrey struck out the side in the ninth inning to earn his third save. The rookie is making a strong case to pitch in the back end of the bullpen next season.

"That was awesome, punching out the side in the ninth," Calhoun said. "He's been huge for us. Going forward, he seems like he's going to be a really, really big piece."

Seattle's Daniel Vogelbach hit a first-pitch, two-run homer off starter Jaime Barria to tie the game at 3-all in the fourth inning.

Barria allowed three runs on six hits in five innings. He was not involved in the decision.

Starter Marco Gonzales, who was 5-0 in his five previous starts against the Angels this season, was not involved in the decision, either. Gonzales allowed three runs on six hits in five innings. He struck out six and walked two.

"Marco wasn't quite as sharp as he was last time out," Mariners manager Scott Servais said. "You've got to give him a ton of credit. He gutted it out and got through the five innings and gave us a chance in a tie ballgame. In the starts he makes down the stretch, we're not going to overextend him, but I think it's important he continues to pitch and finishes the season strong."

The Angels Mike Trout was given a rare day off Sunday.

Mitch Haniger hit a run-scoring double and was 2-for-4 for Seattle.

James Paxton (pneumonia) could join the team in Houston today. Another ailing M's pitcher, Felix Hernandez (hamstring), is still in Seattle, but is expected to join the team at some point during the road trip.

Lefty Wade LeBlanc (8-4, 3.56) will start the series opener in Houston. The Mariners are 15-9 when he starts, but he's 1-1 with a 6.32 ERA in nine career appearances against the Astros.

Seattle Mariners second baseman Robinson Cano takes the throw from catcher Mike Zunino in time to tag out the Angels' Shohei Ohtani trying to steal.(Photo: Alex Gallardo, AP)

Seattle Mariners designated hitter Daniel Vogelbach (20) gets congratulations from Kyle Seager (middle) and David Freitas after hitting a two-RBI home run during the fourth inning.(Photo: Alex Gallardo, AP)