Skip to content

fix: 偶现重复触发开始任务崩溃 - #350

Merged
MistEO merged 2 commits into
MistEO:mainfrom
zmdyy0318:fix/2026091501
Sep 17, 2026
Merged

MistEO merged 2 commits into
MistEO:mainfrom
zmdyy0318:fix/2026091501

Conversation

@zmdyy0318

@zmdyy0318 zmdyy0318 commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

重复触发两次开始任务,最终maafw内部崩溃,即使修了maafw,mxu也会收到两次回调导致一连串问题,所以先从源头防止一下。
close MaaEnd/MaaEnd#5749
opus5.0

Sourcery 总结

错误修复:

  • 防止在同一事件循环中因快速点击而触发重复的任务启动请求,从而避免间歇性内部崩溃。
Original summary in English

Summary by Sourcery

Bug Fixes:

  • Prevent duplicate task-start requests from being triggered by rapid clicks within the same event loop, avoiding intermittent internal crashes.

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

嘿——我发现了 1 个问题

提供给 AI 代理的提示
请处理此次代码审查中的评论:

## 个别评论

### 评论 1
<location path="src/components/Toolbar.tsx" line_range="1570-1571" />
<code_context>

+      // isStarting 是 state,disabled 要等重新渲染才生效,挡不住同一 tick 内的连点
+      if (startingRef.current) return;
+      startingRef.current = true;
+
       // 检查是否需要管理员权限
</code_context>
<issue_to_address>
**问题(bug_risk):** 如果 `checkPermissionRequired()` 被拒绝,控制流会在进入 `try/finally` 代码块之前离开 `handleStartStop`,因此 `startingRef.current` 会保持为 true,后续所有从工具栏发起的启动尝试都会被永久忽略。

**触发条件:**`maaService.isElevated()` 或其他权限检查操作失败时。

**建议修复:** 将权限检查放入同一个 `try/finally` 中,或者在 `checkPermissionRequired()` 外层的 `catch` 中重置 `startingRef.current````suggestion
      // 检查是否需要管理员权限
      let needsElevation = false;
      try {
        needsElevation = await checkPermissionRequired();
      } catch (err) {
        startingRef.current = false;
        throw err;
      }
```
</issue_to_address>

Sourcery 对开源项目免费——如果您喜欢我们的审查,请考虑分享给他人 ✨
Original comment in English

Hey - I've found 1 issue

Prompt for AI Agents
Please address the comments from this code review:

## Individual Comments

### Comment 1
<location path="src/components/Toolbar.tsx" line_range="1570-1571" />
<code_context>

+      // isStarting 是 state,disabled 要等重新渲染才生效,挡不住同一 tick 内的连点
+      if (startingRef.current) return;
+      startingRef.current = true;
+
       // 检查是否需要管理员权限
</code_context>
<issue_to_address>
**issue (bug_risk):** If `checkPermissionRequired()` rejects, control leaves `handleStartStop` before entering the `try/finally` block, so `startingRef.current` remains true and every subsequent toolbar start attempt is permanently ignored.

**Triggers:** When `maaService.isElevated()` or another permission-check operation fails.

**Suggested fix:** Wrap the permission check in the same `try/finally`, or reset `startingRef.current` in a `catch` around `checkPermissionRequired()`.

```suggestion
      // 检查是否需要管理员权限
      let needsElevation = false;
      try {
        needsElevation = await checkPermissionRequired();
      } catch (err) {
        startingRef.current = false;
        throw err;
      }
```
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨

Comment thread src/components/Toolbar.tsx Outdated
@MistEO
MistEO merged commit 34f2f6b into MistEO:main Sep 17, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

偶现的一次MaaEnd执行好友拜访过程中崩溃

2 participants