Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2005-11-04 23:45:56 +0300
committerChristopher Faylor <me@cgf.cx>2005-11-04 23:45:56 +0300
commit72319550c16dee661534dd3002de2101b6a08dd7 (patch)
treee25a597b0bb5379578ed9fc885fbd5ebe329b898
parentf359a29fc84fdb1eca5b46f0a274e6fc8bdbc2ee (diff)
* cygheap.h (init_cygheap::_gtod): New hires_ms element.
* hires.h (hires_ms::minperiod): Remove static designation. (hires::began_period): New field. * signal.cc: Include headers required for cygheap.h now that gtod lives in the cygheap. * timer.c: Ditto. * times.cc (gtod): Delete variable. (gtod::minperiod): Ditto. (gtod::began_period): Define. (hires_ms::prime): Add more debugging output. Call timeBeginPeriod only when !began_period.
-rw-r--r--winsup/cygwin/ChangeLog14
-rw-r--r--winsup/cygwin/cygheap.h3
-rw-r--r--winsup/cygwin/hires.h5
-rw-r--r--winsup/cygwin/signal.cc4
-rw-r--r--winsup/cygwin/timer.cc4
-rw-r--r--winsup/cygwin/times.cc18
6 files changed, 40 insertions, 8 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 42c9f95e4..94cb463cd 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,5 +1,19 @@
2005-11-04 Christopher Faylor <cgf@timesys.com>
+ * cygheap.h (init_cygheap::_gtod): New hires_ms element.
+ * hires.h (hires_ms::minperiod): Remove static designation.
+ (hires::began_period): New field.
+ * signal.cc: Include headers required for cygheap.h now that gtod lives
+ in the cygheap.
+ * timer.c: Ditto.
+ * times.cc (gtod): Delete variable.
+ (gtod::minperiod): Ditto.
+ (gtod::began_period): Define.
+ (hires_ms::prime): Add more debugging output. Call timeBeginPeriod
+ only when !began_period.
+
+2005-11-04 Christopher Faylor <cgf@timesys.com>
+
* times.cc (hires_ms::prime): More debugging.
(hires_ms::usecs): Ditto.
diff --git a/winsup/cygwin/cygheap.h b/winsup/cygwin/cygheap.h
index c151cd007..e9e000f70 100644
--- a/winsup/cygwin/cygheap.h
+++ b/winsup/cygwin/cygheap.h
@@ -8,6 +8,8 @@ This software is a copyrighted work licensed under the terms of the
Cygwin license. Please consult the file "CYGWIN_LICENSE" for
details. */
+#include "hires.h"
+
#undef cfree
enum cygheap_types
@@ -298,6 +300,7 @@ struct init_cygheap
pid_t pid; /* my pid */
HANDLE pid_handle; /* handle for my pid */
hook_chain hooks;
+ hires_ms _gtod;
void close_ctty ();
};
diff --git a/winsup/cygwin/hires.h b/winsup/cygwin/hires.h
index 5dd0cf952..369b087e5 100644
--- a/winsup/cygwin/hires.h
+++ b/winsup/cygwin/hires.h
@@ -41,7 +41,8 @@ class hires_ms : hires_base
{
DWORD initime_ms;
LARGE_INTEGER initime_us;
- static UINT minperiod;
+ UINT minperiod;
+ static bool began_period;
UINT prime ();
public:
LONGLONG usecs (bool justdelta);
@@ -50,5 +51,5 @@ class hires_ms : hires_base
};
-extern hires_ms gtod;
+#define gtod cygheap->_gtod
#endif /*__HIRES_H__*/
diff --git a/winsup/cygwin/signal.cc b/winsup/cygwin/signal.cc
index 443d9ec6f..87e16ca69 100644
--- a/winsup/cygwin/signal.cc
+++ b/winsup/cygwin/signal.cc
@@ -21,6 +21,10 @@ details. */
#include "hires.h"
#include "security.h"
#include "cygtls.h"
+#include "path.h"
+#include "fhandler.h"
+#include "dtable.h"
+#include "cygheap.h"
int sigcatchers; /* FIXME: Not thread safe. */
diff --git a/winsup/cygwin/timer.cc b/winsup/cygwin/timer.cc
index c6dc2754b..e93653491 100644
--- a/winsup/cygwin/timer.cc
+++ b/winsup/cygwin/timer.cc
@@ -18,6 +18,10 @@ details. */
#include "cygtls.h"
#include "sigproc.h"
#include "sync.h"
+#include "path.h"
+#include "fhandler.h"
+#include "dtable.h"
+#include "cygheap.h"
#define TT_MAGIC 0x513e4a1c
struct timer_tracker
diff --git a/winsup/cygwin/times.cc b/winsup/cygwin/times.cc
index 541f2bca6..22bd79684 100644
--- a/winsup/cygwin/times.cc
+++ b/winsup/cygwin/times.cc
@@ -144,8 +144,7 @@ totimeval (struct timeval *dst, FILETIME *src, int sub, int flag)
dst->tv_sec = x / (long long) (1e6);
}
-hires_ms gtod;
-UINT NO_COPY hires_ms::minperiod; /* minperiod needs to be NO_COPY since it
+bool NO_COPY hires_ms::began_period; /* minperiod needs to be NO_COPY since it
is a trigger for setting timeBeginPeriod
which needs to be set once for every
program. */
@@ -633,18 +632,25 @@ hires_ms::prime ()
TIMECAPS tc;
FILETIME f;
-stupid_printf ("entering, minperiod %d", minperiod);
+stupid_printf ("entering, minperiod %d, began_period %d", minperiod, began_period);
if (minperiod)
/* done previously */;
else if (timeGetDevCaps (&tc, sizeof (tc)) != TIMERR_NOERROR)
+{stupid_printf ("timeGetDevCaps failed, %E");
minperiod = 1;
+}
else
+{
+ minperiod = min (max (tc.wPeriodMin, 1), tc.wPeriodMax);
+stupid_printf ("timeGetDevCaps succeeded. tc.wPeriodMin %u, tc.wPeriodMax %u, minperiod %u", tc.wPeriodMin, tc.wPeriodMax, minperiod); }
+stupid_printf ("inited %d, minperiod %u, began_period %d", minperiod, began_period);
+
+ if (!began_period)
{
- minperiod = min (max (tc.wPeriodMin, 1), tc.wPeriodMax);
-stupid_printf ("timeGetDevCaps succeeded. tc.wPeriodMin %u, tc.wPeriodMax %u, minperiod %u", tc.wPeriodMin, tc.wPeriodMax, minperiod);
timeBeginPeriod (minperiod);
+ began_period = true;
+stupid_printf ("timeBeginPeriod called");
}
-stupid_printf ("inited %d");
if (!inited)
{