Opened 9 years ago

Closed 17 months ago

#6956 closed defect (fixed)

GUI: LAUNCHER: ScummVM returned with unfreed signals (AmigaOS4)

Reported by: raziel- Owned by: PushmePullyu
Priority: normal Component: Port: AmigaOS4
Version: Keywords:
Cc: Game:

Description

ScummVM 1.8.0git (Nov 21 2015 06:56:08) Features compiled in: Vorbis FLAC MP3 RGB zLib MPEG2 Theora AAC FreeType2 JPEG PNG

When using scummvm with a wrong option in shell i get this warning/error message.

scummvm -version scummvm: Unrecognized option '-version' Usage: scummvm [OPTIONS]... [GAME]

Try 'scummvm --help' for more options. ***Command 'scummvm' returned with unfreed signals 30000000!

While it's not a crash or anything it shouldn't do that, i think?

AmigaOS4 - PPC - SDL - BE gcc (GCC) 4.2.4 (adtools build 20090118)

Ticket imported from: bugs/6956.

Change History (24)

comment:1 by sev-, 8 years ago

Component: GUI

comment:2 by digitall, 6 years ago

That message appears to be AmigaOS4 specific, but not sure what it actually means.

@raziel-: What exactly does that warning/error mean?

comment:3 by digitall, 6 years ago

Component: GUIPort: AmigaOS4

comment:4 by raziel-, 6 years ago

Thank you for caring about my old bug reports.

I'll go check with the os devs/sdk maintainers and report back.

comment:5 by digitall, 6 years ago

Hmm.. http://forum.hyperion-entertainment.biz/viewtopic.php?f=26&t=590

Odd as the AmigaOS4 specific code is in backends/sdl/amigaos4 and backends/fs/amigaos4 and doesn't use AllocSignal as far as I can find. I suspect this is either a leak in the FS code or maybe in SDL.

Firstly and most importantly, @raziel- , can you still replicate this bug with the latest git master i.e. this is not an outdated bug?

comment:6 by raziel-, 6 years ago

Yes, this still happens, i just tried with latest master, though the signal number changed from my original report

*Command 'scummvm' returned with unfreed signals 1C000000!

comment:7 by raziel-, 6 years ago

If i do a "conent" search over the scummvm code i can find "AllocSignal" in

backends/libbackends.o
backends/fs/amigaos4/amigaos4-fs.o
backends/fs/amigaos4/amigaos4-fs-factory.o
backends/midi/camd.o
backends/platform/sdl/amigaos/amigaos-main.o

but nowhere in the source (.cpp/.h) files, so it seems as they are being added by the system/sdk on compiling.

I can also find "FreeSignal" in

backends/libbackends.a
backends/fs/amigaos4/amigaos4-fs.o
backends/fs/amigaos4/amigaos4-fs-factory.o
backends/midi/camd.o
backends/platform/sdl/amigaos/amigaos-main.o

so it again seems that the system at least sets most of the FreeSignal() correctly (while i can't really check), except libbackends.a (instead of .o)?

Version 0, edited 6 years ago by raziel- (next)

comment:8 by raziel-, 6 years ago

Basically what is happening is this....

A shell runs in its own process, when you start a program from that shell
process, the program uses the shells process to execute, the shell code
goes to sleep during the program execution, when the program ends,
the shell code resumes and is ready to take another command line.

So, when the program is being executed, it's apparently allocating a signal,
such as would happen if the program was to allocate a message port or
other such activity during its operation.

However, the program is exiting without freeing all the resources it allocated,
so the shell notices this and posts the message because as the shell process
is continually reused by subsequent programs, it will eventually run out of
signals to allocate (only 16 user signals available) and all sorts of bad juju
will happen if that occurs.

So, yes, the program being run is doing something it shouldn't when it exits
in an unexpected way.

comment:9 by raziel-, 6 years ago

Summary: LAUNCHER: ScummVM returned with unfreed signalsAMIGAOS4: Launcher - ScummVM returned with unfreed signals

comment:10 by raziel-, 6 years ago

Could this be the culprit?
https://github.com/scummvm/scummvm/blob/master/base/commandLine.cpp#L197

It doesn't seem to do any cleanup, unless i missed an atexit() somewhere.

comment:11 by digitall, 6 years ago

That could very well be the culprit. There are no atexit() in the code, so maybe when usage is printed something is being left dangling. Will need to look at this. Beyond this, we should probably audit the codebase for exit() calls and remove / reduce the need for them down to a single call if needs be... but that is beyond the scope of just this bug.

comment:12 by raziel-, 6 years ago

@digitall

Thank you, i'll stand by for testing

comment:13 by raziel-, 4 years ago

Summary: AMIGAOS4: Launcher - ScummVM returned with unfreed signalsLAUNCHER: ScummVM returned with unfreed signals (AmigaOS4)

comment:14 by sev-, 4 years ago

Summary: LAUNCHER: ScummVM returned with unfreed signals (AmigaOS4)GUI: LAUNCHER: ScummVM returned with unfreed signals (AmigaOS4)

comment:15 by lephilousophe, 17 months ago

Is this bug still a thing?

comment:16 by raziel-, 17 months ago

Unfortunately, yes

scummvm -version

scummvm: Unrecognized option '-version'
Usage: scummvm [OPTIONS]... [GAME]

Try 'scummvm --help' for more options.
*Command 'scummvm' returned with unfreed signals 0F800000!

comment:17 by PushmePullyu, 17 months ago

Does this still happen when adding a call to g_system->destroy() just before the exit() call in base/commandLine.cpp?

comment:18 by raziel-, 17 months ago

I'll test as soon as I'm back home.

Is it as easy as adding
g_system->destroy();
or do i need to adapt that?

Thank you

comment:19 by PushmePullyu, 17 months ago

No need to adapt it. Diff from b625def03384bd84d15b3eda3f58410c2e89f84b:

--- a/base/commandLine.cpp
+++ b/base/commandLine.cpp
@@ -270,6 +270,7 @@ static void usage(const char *s, ...) {
 
        printf(USAGE_STRING, s_appName, buf, s_appName, s_appName);
 #endif
+       g_system->destroy();
        exit(1);
 }

comment:20 by raziel-, 17 months ago

/me hugs @PushmePullyu

scummvm --version
ScummVM 2.8.0git (Jun 20 2023 14:19:55)
Using SDL backend with SDL 2.26.5
Features compiled in: Vorbis FLAC MP3 RGB zLib MPEG2 MikMod Theora VPX AAC A/52 FreeType2 FriBiDi JPEG PNG GIF cloud (servers, local) ENet SDL2 TinyGL OpenGL (with shaders) 
scummvm -version
scummvm: Unrecognized option '-version'
Usage: scummvm [OPTIONS]... [GAME]

Try 'scummvm --help' for more options.

No more unfreed signals :-)

Thank you very much

comment:21 by PushmePullyu, 17 months ago

Thanks for testing. This should then be done in a more general way to catch all direct and indirect exit() calls. Could you try with https://github.com/PushmePullyu/scummvm/tree/amigaos-free-signals? If that works I'll PR it.

comment:22 by raziel-, 17 months ago

This works as well, thank you so much

...don't go anywhere...
/me rummaging through my bug reports

;-)

comment:23 by PushmePullyu, 17 months ago

Wow, that was quick. Glad it fixes the bug. PR for reference: https://github.com/scummvm/scummvm/pull/5109

comment:24 by bluegr, 17 months ago

Owner: set to PushmePullyu
Resolution: fixed
Status: newclosed

The PR has been merged, so this can be closed

Note: See TracTickets for help on using tickets.