shadow1ng/fscan · error

%s [minidump_timeout]

Error message

%s [minidump_timeout]

What it means

Thrown by ProcessManager.dumpProcessWithTimeout when the context is cancelled (ctx.Done) before the dump goroutine posts a result on resultChan. The library enforces a timeout because MiniDumpWriteDump on large or hung processes can block indefinitely. It means the dump did not complete within the caller-supplied deadline.

Source

Thrown at plugins/local/minidump.go:420

	if handle == 0 {
		return 0, fmt.Errorf("%s", i18n.GetText("minidump_current_process_failed"))
	}
	return syscall.Handle(handle), nil
}

// dumpProcessWithTimeout 带超时的转储进程内存
func (pm *ProcessManager) dumpProcessWithTimeout(ctx context.Context, pid uint32, outputPath string) error {
	resultChan := make(chan error, 1)

	go func() {
		resultChan <- pm.dumpProcess(pid, outputPath)
	}()

	select {
	case err := <-resultChan:
		return err
	case <-ctx.Done():
		return fmt.Errorf("%s", i18n.GetText("minidump_timeout"))
	}
}

// dumpProcess 转储进程内存
func (pm *ProcessManager) dumpProcess(pid uint32, outputPath string) error {
	processHandle, err := pm.openProcess(pid)
	if err != nil {
		return err
	}
	defer pm.closeHandle(processHandle)

	fileHandle, err := pm.createDumpFile(outputPath)
	if err != nil {
		return err
	}
	defer pm.closeHandle(fileHandle)

	miniDumpWriteDump, err := pm.dbghelp.FindProc("MiniDumpWriteDump")

View on GitHub (pinned to 95cc12e753)

Solutions

  1. Increase the context timeout proportionally to the target process's committed memory size.
  2. Write the dump to fast local storage instead of a network share or slow disk.
  3. Check the target process state (hung/suspended) and retry once it is responsive; avoid dumping while the process is being debugged or suspended.

Example fix

// before
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
// after — scale timeout to the dump size
ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second)
Defensive patterns

Strategy: retry

Validate before calling

// size the timeout to the target's memory footprint before dumping
ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second)
defer cancel()

Try / catch

err := pm.dumpProcessWithTimeout(ctx, pid, path)
if err != nil && strings.Contains(err.Error(), "minidump_timeout") {
    // retry once with a larger deadline and local output path
}

Prevention

When it happens

Trigger: tryDirectDump calls dumpProcessWithTimeout with a ctx whose deadline expires while MiniDumpWriteDump is still writing the dump file — typically for very large process memory footprints, slow/late disk, or a suspended/hung target.

Common situations: Dumping multi-gigabyte processes (databases, browsers) with a too-short timeout; target process suspended or stuck in kernel; dumping to a network share or slow HDD.

Understand the failure class

Background: Request timed out: what client-side request timeouts mean across libraries (Request timed out, TIMED_OUT, APITimeoutError) — this error's family across 39 libraries.

Related errors


AI-assisted analysis of shadow1ng/fscan@95cc12e753 (2026-09-06). Data as JSON: /api/errors/c7c8e1954ddab82e. Report an issue: GitHub.