Archived

This forum has been archived. Please start a new discussion on GitHub.

QNX 6.3-SP3 for Ice-3.1.1

this patch works on QNX Neutrino 6.3.0 SP3.
using gcc-3.3.5 with Dinkum std lib implementation

everything builds. all tests pass except the following (which are disalbed in the patch). the problems are related to the database library which supposedly supports QNX but complains about 11 "unknown symbols" at runtime.

# "IceSSL/configuration", \
# "Freeze/dbmap", \
# "Freeze/evictor", \
# "FreezeScript/dbmap", \
# "FreezeScript/evictor", \
# "IceGrid/simple", \
# "IceGrid/deployer", \
# "IceGrid/session", \
# "IceGrid/update", \
# "IceGrid/activation", \
# "IceGrid/replication", \
# "IceGrid/allocation", \
# "Glacier2/ssl", \
# "Glacier2/filters", \
# "Glacier2/addressFilter", \

also, one section (RWRecMutexTest) of IceUtil/thread test fails and is disabled. it is not used by Ice internal code so I didn't try to fix it.

there's something non-standard about QNX patch utility, so i've patched the source in Linux and then moved it over to QNX.
$ tar -xzf Ice-3.1.1.tar.gz
$ cd Ice-3.1.1
$ patch -p1 < ../ice311qnx.patch.txt

For more installation details including building dependencies, see
http://orca-robotics.sf.net/cvs/orca_doc_installqnx.html

cheers, alex

Comments

  • advice on making IceGrid work in QNX

    I'm testing the patch I've posted here before.

    One problem I have is that the IceGrid Node's activator uses fork() which in QNX-6 is only supported for single-threaded processes. fork() returns an error and a syscall exception is caught in Activator.cpp:674. This is POSIX-compliant behavior but unfortunately not very useful.

    I can try to use spawn() or vfork(). From the documentation vfork() seems dodgy and both would probably be non-trivial to debug. So I wonder if the IceGrid designers would have some advice.

    Should spawn() be able to do the job in this context or the activator relies on some state being passed to the child process?

    thanks,
    alex
  • benoit
    benoit Rennes, France
    Hi,

    Assuming the spawn() system call you're mentioning is the one documented here, it looks like you should be able to use it with only one limitation: it doesn't support changing the user id or the group id of the forked process. You'll also have to make sure that all the file descriptors from the parent are NOT inhereted except for stdin/stdout/stderr and the write side of the pipe created before the call to fork.

    Cheers,
    Benoit.
  • Thanks Benoit, I got it to work using spawn() with my components. I am probably not covering all corner cases and it doesn't work with IceBox/IceStorm yet but I can debug it later.

    Thanks for the info,
    alex