~ubuntu-branches/ubuntu/trusty/wvstreams/trusty

« back to all changes in this revision

Viewing changes to streams/wvdailyevent.cc

  • Committer: Bazaar Package Importer
  • Author(s): Peter Eisentraut
  • Date: 2008-04-05 14:47:52 UTC
  • mfrom: (0.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20080405144752-gka8v86xuo52fmto
Tags: 4.4.1-0.2
* Non-maintainer upload.
* Fixed dependency information LSB header in init.d script
  (closes: #470067)

Show diffs side-by-side

added added

removed removed

Lines of Context:
29
29
WvDailyEvent::WvDailyEvent(int _first_hour, int _num_per_day, bool _skip_first)
30
30
    : prev(time(NULL))
31
31
{
 
32
    need_reset = false;
 
33
    prev = wvstime().tv_sec;
32
34
    configure(_first_hour, _num_per_day, _skip_first);
33
35
}
34
36
 
35
37
 
36
38
// Compute the next time this stream should select()
37
 
bool WvDailyEvent::pre_select(SelectInfo &si)
 
39
void WvDailyEvent::pre_select(SelectInfo &si)
38
40
{
39
 
    WvTime next(next_event(), 0);
40
 
    if (next)
41
 
        si.msec_timeout = msecdiff(next, wvtime());
42
 
    return WvStream::pre_select(si);
 
41
    WvStream::pre_select(si);
 
42
 
 
43
    if (num_per_day)
 
44
    {
 
45
        time_t now = wvstime().tv_sec;
 
46
        time_t next = next_event();
 
47
 
 
48
        assert(prev);
 
49
        assert(next);
 
50
        assert(prev > 100000);
 
51
        assert(next > 100000);
 
52
 
 
53
        //printf("%d %d %d\n", now, next, msecdiff(now, next));
 
54
        if (now < next)
 
55
            si.msec_timeout = msecdiff(now, next);
 
56
        else if (!need_reset)
 
57
        {
 
58
            need_reset = true;
 
59
            prev = next;
 
60
        }
 
61
    }
 
62
    if (need_reset)
 
63
        si.msec_timeout = 0;
 
64
    //printf("%p msd=%d\n", this, ret, si.msec_timeout);
43
65
}
44
66
 
45
67
 
54
76
        prev = next;
55
77
    }
56
78
 
57
 
    return WvStream::post_select(si) || timer_rang;
 
79
    return WvStream::post_select(si) || need_reset || timer_rang;
58
80
}
59
81
 
60
82
 
72
94
        max = 6*60*60; // unless that's a very long time, 6 hrs
73
95
 
74
96
    // don't start until at least one period has gone by
75
 
    prev = time(NULL);
 
97
    prev = wvstime().tv_sec;
76
98
    not_until = prev + max;
77
99
}
78
100