Merge pull request #11 from defunkt/claude/fix-app-rename-shutdown-IzD79
Make renameApp async and fix race condition on app restart
This commit is contained in:
commit
f0bef491a6
|
|
@ -229,7 +229,7 @@ router.post('/:app/rename', async c => {
|
|||
|
||||
if (!newName) return c.json({ ok: false, error: 'New name is required' }, 400)
|
||||
|
||||
const result = renameApp(appName, newName)
|
||||
const result = await renameApp(appName, newName)
|
||||
if (!result.ok) return c.json(result, 400)
|
||||
|
||||
return c.json({ ok: true, name: newName })
|
||||
|
|
|
|||
|
|
@ -142,7 +142,7 @@ export function registerApp(dir: string) {
|
|||
}
|
||||
}
|
||||
|
||||
export function renameApp(oldName: string, newName: string): { ok: boolean, error?: string } {
|
||||
export async function renameApp(oldName: string, newName: string): Promise<{ ok: boolean, error?: string }> {
|
||||
const app = _apps.get(oldName)
|
||||
if (!app) return { ok: false, error: 'App not found' }
|
||||
|
||||
|
|
@ -155,15 +155,13 @@ export function renameApp(oldName: string, newName: string): { ok: boolean, erro
|
|||
const oldPath = join(APPS_DIR, oldName)
|
||||
const newPath = join(APPS_DIR, newName)
|
||||
|
||||
// Stop the app if running
|
||||
// Stop the app and wait for process to fully exit so the port is freed
|
||||
const wasRunning = app.state === 'running'
|
||||
if (wasRunning) {
|
||||
const proc = app.proc
|
||||
clearTimers(app)
|
||||
app.proc?.kill()
|
||||
app.proc = undefined
|
||||
if (app.port) releasePort(app.port)
|
||||
app.port = undefined
|
||||
app.started = undefined
|
||||
if (proc) await proc.exited
|
||||
}
|
||||
|
||||
try {
|
||||
|
|
@ -681,6 +679,10 @@ async function runApp(dir: string, port: number) {
|
|||
|
||||
// Handle process exit
|
||||
proc.exited.then(code => {
|
||||
// If the app has moved on (e.g. renamed and restarted), this is a
|
||||
// stale exit handler — don't touch current app state or ports
|
||||
if (app.proc && app.proc !== proc) return
|
||||
|
||||
// Clear all timers
|
||||
clearTimers(app)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user