Qt, forks and threads = segmentation faults?
David Jander
david.jander at protonic.nl
Mon Jan 30 20:42:52 EST 2006
Hi Russell,
On Saturday 28 January 2006 01:30, Russell McGuire wrote:
> This is a more general question, and if anyone knows of a more specialized
> list this should be posted to, I'd be happy to do so...
>
> Small picture of hardware:
> DENX Linux 2.4.25 / PowerPC MPC8280 / 32 MBs of RAM
>
> I am using QT Embedded for a small GUI that does BSD sockets, also using
> DENX's SM501 video driver. Everything is quite stable, recently I added a
> additional process to the application using fork() for the listening
> 'accept' call for the sockets.
>
> After many tests I decided that due to the nature of the fork() command and
> the GUI half of the program, that this was a large waste of memory, as I
> was duplicating the entire GUI system. So I started looking alternatives,
> and have landed at the 'pthread' library.
It shouldn't be a waste of memory, since Linux uses copy-on-write for memory
pages. That means, although it looks like your child process wates a lot of
memory (same initial VSS size as parent), it actually shares its memory with
the parent until the child starts modifying memory contents (write fault
occurs). At that moment the page being written to is copied, and the write
access succeeds on the copied page. So fork() is nowadays quite efficient in
linux systems..... exactly as efficient as creating a thread.
> However, now I have lots of segmentation faults, particularly when I send a
> message using QT's postEvent commands back to the main thread.
Eeek. You might want to compile QT with thread support compiled in (don't know
if that helps though).
Anyway, it is probably a better idea to stick with fork() (see above).
> I was curious if anyone had any better idea of a more stable or perhaps a
> suggestion on why I am able to only get about 30 seconds of run time out of
> the app using pthread, verses fork() seems to be much stabler.
Use fork().
Greetings,
--
David Jander
More information about the Linuxppc-embedded
mailing list