summary refs log tree commit diff
path: root/pkgs/development/haskell-modules/patches/clock-0.7.2.patch
blob: 8354c7fa58903d5c6a3595f3d79292ec5ed7e80a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
diff --git a/System/Clock.hsc b/System/Clock.hsc
index 297607b..c21196b 100644
--- a/System/Clock.hsc
+++ b/System/Clock.hsc
@@ -41,7 +41,9 @@ import GHC.Generics (Generic)
 #  endif
 #endif

-#let alignment t = "%lu", (unsigned long)offsetof(struct {char x__; t (y__); }, y__)
+#if __GLASGOW_HASKELL__ < 800
+#  let alignment t = "%lu", (unsigned long)offsetof(struct {char x__; t (y__); }, y__)
+#endif

 -- | Clock types. A clock may be system-wide (that is, visible to all processes)
 --   or per-process (measuring time that is meaningful only within a process).
diff --git a/cbits/hs_clock_win32.c b/cbits/hs_clock_win32.c
index 5dcc2a9..ebdb7fe 100644
--- a/cbits/hs_clock_win32.c
+++ b/cbits/hs_clock_win32.c
@@ -28,12 +28,22 @@ static void to_timespec_from_100ns(ULONGLONG t_100ns, long long *t)
     t[1] = 100*(long)(t_100ns % 10000000UL);
 }

+/* See https://ghc.haskell.org/trac/ghc/ticket/15094 */
+#if defined(_WIN32) && !defined(_WIN64)
+__attribute__((optimize("-fno-expensive-optimizations")))
+#endif
 void hs_clock_win32_gettime_monotonic(long long* t)
 {
    LARGE_INTEGER time;
-   LARGE_INTEGER frequency;
+   static LARGE_INTEGER frequency;
+   static int hasFreq = 0;
+
    QueryPerformanceCounter(&time);
-   QueryPerformanceFrequency(&frequency);
+   if (!hasFreq)
+   {
+      hasFreq = 1;
+      QueryPerformanceFrequency(&frequency);
+   }
    // seconds
    t[0] = time.QuadPart / frequency.QuadPart;
    // nanos =
diff --git a/clock.cabal b/clock.cabal
index 0f2d18a..67d232e 100644
--- a/clock.cabal
+++ b/clock.cabal
@@ -41,8 +41,8 @@ description:   A package for convenient access to high-resolution clock and
 copyright:     Copyright © Cetin Sert 2009-2016, Eugene Kirpichov 2010, Finn Espen Gundersen 2013, Gerolf Seitz 2013, Mathieu Boespflug 2014 2015, Chris Done 2015, Dimitri Sabadie 2015, Christian Burger 2015, Mario Longobardi 2016
 license:       BSD3
 license-file:  LICENSE
-author:        Cetin Sert <cetin@corsis.eu>, Corsis Research
-maintainer:    Cetin Sert <cetin@corsis.eu>, Corsis Research
+author:        Cetin Sert <cetin@corsis.tech>, Corsis Research
+maintainer:    Cetin Sert <cetin@corsis.tech>, Corsis Research
 homepage:      https://github.com/corsis/clock
 bug-reports:   https://github.com/corsis/clock/issues
 category:      System