[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: GEMPAK 5.8.4 SpeedPatch runtime problems



Christian,

The perror statement which generates your message is in
$GEMNPAK/source/gemlib/cc/cssleep.c

One possibility is that the cssleep routine is being called by
the ssnwait.f routine which an unititialized nanosec value
(which should default to 0).

This ssnwait.f should be fixed to assign a non-zero value to nanosec.

Steve Chiswell
Unidata User Support


On Fri, 2005-12-16 at 08:43, Christian Pagé wrote:
> ok, here it is. I run sfmap with the following variables:
>  AREA     = yul
>  GAREA    = yul
>  SATFIL   =
>  RADFIL   =
>  IMCBAR   =
>  SFPARM   = stid
>  DATTIM   = 12
>  SFFILE   = /home/ldm/data/gempak/surface/sao/20051216_sao.gem
>  COLORS   = 1
>  MAP      = 1
>  MSCALE   = 0
>  LATLON   =
>  TITLE    = 1
>  CLEAR    = yes
>  PANEL    = 0
>  DEVICE   = XW
>  PROJ     = nps
>  FILTER   = 1
>  TEXT     = 1
>  LUTFIL   =
>  STNPLT   =
>  CLRBAR   =
> 
> Then, as soon as I type run, I get the nanosleep errors before getting
> the confirmation text dialog of GEMPAK for the parameters, as well as
> after that, either if I type EXIT or return.
> 
> Christian
> 
> 2005/12/16, Ron McTaggart-Cowan <address@hidden>:
> > Christian - can you try to reproduce the error with a minimal code
> > segment and post that?  A null second argument to nanosleep is supposed
> > to be permissible if you're not worried about continuing a sleep
> > following an interrupt...
> > ron
> >
> > On Fri, 2005-12-16 at 09:10 -0500, Christian Pagé wrote:
> > > Hello,
> > >
> > > When using the latest GEMPAK 5.8.4 which I compiled (and which
> > > includes the SpeedPatch), I get plenty of these errors:
> > > nanosleep: Invalid argument
> > >
> > > But the plot is ok though. But thousands of lines like this in the
> > > terminal... Any idea why? I suspect that the NULL second argument is a
> > > problem...
> > >
> > > uname -a:
> > > Linux 2.6.14-1.1637_FC4smp #1 SMP Wed Nov 9 19:21:28 EST 2005 x86_64
> > > x86_64 x86_64 GNU/Linux
> > >
> > > The source of GEMPAK using nanosleep:
> > > ./source/syslib/ccheck.c:                   ierr = nanosleep ( &fast, 
> > > NULL );
> > > ./source/syslib/ccheck.c:                   ierr = nanosleep ( &slow, 
> > > NULL );
> > > ./source/syslib/cnsleep.c: * This function is used by systems without
> > > a nanosleep builtin.  It is       *
> > > ./source/syslib/cnsleep.c: * compiled to 'nanosleep' (interface as
> > > given in time.h) using the   *
> > > ./source/gemlib/ss/cssleep.c:   *iret = nanosleep ( &rqtp, NULL );
> > > ./source/gemlib/ss/cssleep.c:       perror("nanosleep");
> > >
> > > And finally the man page of nanosleep in my system:
> > > NANOSLEEP(2)               Linux Programmer?s Manual              
> > > NANOSLEEP(2)
> > >
> > > NAME
> > >        nanosleep - pause execution for a specified time
> > >
> > > SYNOPSIS
> > >        #include <time.h>
> > >
> > >        int nanosleep(const struct timespec *req, struct timespec *rem);
> > >
> > > DESCRIPTION
> > >        nanosleep  delays  the  execution of the program for at least
> > > the time specified in *req.
> > >        The function can return earlier if a signal has been delivered
> > > to the  process.  In  this
> > >        case,  it  returns -1, sets errno to EINTR, and writes the
> > > remaining time into the struc-
> > >        ture pointed to by rem unless rem is NULL.  The value of *rem
> > > can then be  used  to  call
> > >        nanosleep again and complete the specified pause.
> > >
> > >        The structure timespec is used to specify intervals of time
> > > with nanosecond precision. It
> > >        is specified in <time.h> and has the form
> > >
> > >               struct timespec
> > >               {
> > >                       time_t  tv_sec;         /* seconds */
> > >                       long    tv_nsec;        /* nanoseconds */
> > >               };
> > >
> > >        The value of the nanoseconds field must be in the range 0 to 999 
> > > 999 999.
> > >
> > >        Compared to sleep(3) and usleep(3), nanosleep has the advantage
> > > of not affecting any sig-
> > >        nals, it is standardized by POSIX, it provides higher timing
> > > resolution, and it allows to
> > >        continue a sleep that has been interrupted by a signal more easily.
> > >
> > > ERRORS
> > >        In case of an error or exception, the nanosleep system call
> > > returns -1 instead of  0  and
> > >        sets errno to one of the following values:
> > >
> > >        EINTR  The  pause  has been interrupted by a non-blocked signal
> > > that was delivered to the
> > >               process. The remaining sleep time has been written into
> > > *rem so that  the  process
> > >               can easily call nanosleep again and continue with the pause.
> > >
> > >        EINVAL The value in the tv_nsec field was not in the range 0 to
> > > 999 999 999 or tv_sec was
> > >               negative.
> > >
> > >        EFAULT Problem with copying information from user space.
> > >
> > > BUGS
> > >        The current implementation of nanosleep is based on the normal
> > > kernel  timer  mechanism,
> > >        which  has  a  resolution  of  1/HZ s (i.e, 10 ms on Linux/i386
> > > and 1 ms on Linux/Alpha).
> > >        Therefore, nanosleep pauses always for at least the specified
> > > time, however it  can  take
> > >        up  to 10 ms longer than specified until the process becomes
> > > runnable again. For the same
> > >        reason, the value returned in case of a delivered signal in
> > > *rem is  usually  rounded  to
> > >        the next larger multiple of 1/HZ s.
> > >
> > >        As  some  applications  require  much more precise pauses
> > > (e.g., in order to control some
> > >        time-critical hardware), nanosleep is also capable of short
> > > high-precision pauses. If the
> > >        process is scheduled under a real-time policy like SCHED_FIFO
> > > or SCHED_RR, then pauses of
> > >        up to 2 ms will be performed as busy waits with microsecond 
> > > precision.
> > >
> > > CONFORMING TO
> > >        POSIX.1b (formerly POSIX.4).
> > >
> > > SEE ALSO
> > >        sleep(3), usleep(3), sched_setscheduler(2), timer_create(2)
> > >
> > > Linux 1.3.85                      1996-04-10                      
> > > NANOSLEEP(2)
> > >
> >
> >
> 
> 
> --
> Christian Pagé
> http://meteocentre.com/    http://meteoalerte.com/
> Etudiant au Doctorat en Sciences de l'environnement UQAM