Thanks for the fast answers!

I debugged the Thread:sleep function in the file Thread.cc with the
printfs, as you suggest me. I found that the function
 pthread_cond_timedwait is returning an error code  EINVAL (The value
specified by cond, mutex, or abstime is invalid). So, I checked the
argument passed to the function and I found an error. The abstime argument
cannot had a tv_nsec value of less than 0 or greater than 1,000,000,000 but
in the function is possible that your tout.tv_nsec get a value greater than
1,000,000,000. So I changed the function fixing this invalid argument and
It works, the problem is solved!!!.

This is the change that I made in the sleep function:

void
Thread::sleep(x10_long millis, x10_int nanos)
{
    Thread* th = currentThread();
    cond_mutex_t *cmp = &(th->__thread_cmp);
    x10_boolean done = false;
    struct timeval tval;
    struct timespec tout;
    long sleep_usec;
    int rc;
    __xrxDPrStart();
    rc= pthread_mutex_lock(&(cmp->mutex));
    pthread_cleanup_push(thread_sleep_cleanup, (void *)cmp);
    gettimeofday(&tval, NULL);
    tout.tv_sec = tval.tv_sec + (millis/1000);
    tout.tv_nsec = ((tval.tv_usec + ((millis%1000) * 1000)) * 1000) + nanos;
*    tout.tv_sec += tout.tv_nsec / 1000000000UL;*
*    tout.tv_nsec %= 1000000000UL;*
    while (!done) {
        rc = pthread_cond_timedwait(&(cmp->cond), &(cmp->mutex), &tout);
        if (rc == ETIMEDOUT) {
            done = true;
        } else {
            break;
        }
    }
    pthread_cleanup_pop(1);
    if (!done) throwException<InterruptedException>();
    __xrxDPrEnd();
}

Danny MĂșnera


On Thu, Apr 3, 2014 at 2:14 PM, David P Grove <gro...@us.ibm.com> wrote:

>  Danny Munera <dannymun...@gmail.com> wrote on 04/03/2014 05:40:10 AM:
>
> >
> > I'm using the function System.sleep() to activate some functionality
> > in my project to be executed each X ms. However, I have some strange
> > behavior in this function, because frequently it is returning with
> > false (interrupted), and the functionality is not correctly
> > executed. I'm getting lots of messages "cannot execute sleep".
> >
> > I've read the documentation of the sleep function, but i didn't find
> > any clue to fix this problem. I also implemented a simple example
> > using only the sleep function and It works well, but when I use the
> > sleep in my code It doesn't work. I have no idea where I should
> > start to search the cause of the problem.
> >
> > Could you give me some suggestion about how to find the cause of this
> problem?
> >
>
> Looking at the implementation of sleep, this strongly suggests that some
> other part of your program is interrupting the sleeping thread.  As Vijay
> suggested, you could program around this.  This would give you the sleep
> behavior you want, but perhaps mask a real (performance) problem in the
> rest of your program you should be fixing.  I'd try to get a
> debugger/logging printfs into the Java/C++ implementations of Thread.sleep
> and see if there are hints as to where the interrupts are coming from.
>
> --dave
>
>
>
> ------------------------------------------------------------------------------
>
> _______________________________________________
> X10-users mailing list
> X10-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/x10-users
>
>
------------------------------------------------------------------------------
_______________________________________________
X10-users mailing list
X10-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/x10-users

Reply via email to