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 <[email protected]> wrote:
> Danny Munera <[email protected]> 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
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/x10-users
>
>
------------------------------------------------------------------------------
_______________________________________________
X10-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/x10-users