Commit Graph

738 Commits

Author SHA1 Message Date
Michael Walker
dcddfa42a5 Merge pull request #77 from gamazeps/cancel
Make cancel blocking
2017-04-05 20:33:23 +01:00
Felix Raimundo
ed08975e3f Make cancel blocking
In the documentation of `cancel`, it is said to be blocking, waiting on
the cancelled `async` to die. It seems to me that is not the case.

This patch simply applies the code written by Simon Marlow in order
to wait for the termination of the `async`.

See:
https://hackage.haskell.org/package/async-2.1.1/docs/src/Control.Concurrent.Async.html#cancel
2017-04-05 16:44:08 +02:00
Michael Walker
5d8ada4a5f Move dependency function to Test.DejaFu.SCT.Internal. 2017-03-27 18:53:47 +01:00
Michael Walker
8394904831 Add note about performance profiling to README. 2017-03-20 19:27:42 +00:00
Michael Walker
80d00224c4 Use the https clone path for test-framework-hunit. 2017-03-20 18:54:24 +00:00
Michael Walker
743ae2e233 Add HUnit-1.6 support to hunit-dejafu. 2017-03-20 18:42:51 +00:00
Michael Walker
0e59d9aa40 Add a basic test for uninterruptible masks.
Closes #76.
2017-03-04 05:36:32 +00:00
Michael Walker
c2f8ffe473 Add some CAS tests.
Closes #75.
2017-03-04 05:28:29 +00:00
Michael Walker
32f6887a1b Add tests for throwing exceptions to the main thread.
Closes #74.
2017-03-04 05:28:29 +00:00
Michael Walker
61389f5875 Include the final failing action in the execution trace. 2017-03-04 05:28:29 +00:00
Michael Walker
7eda900d87 Only return 'UncaughtException' when the main thread is killed. 2017-03-04 05:28:29 +00:00
Michael Walker
a62c2df141 Add note on code coverage to README. 2017-03-04 05:28:28 +00:00
Michael Walker
6c7fb47cff Remove async-dejafu from travis. 2017-03-03 22:19:42 +00:00
Michael Walker
463efd3f8d Merge "async-dejafu" into "concurrency" + bump versions.
Closes #73.
2017-03-03 22:06:09 +00:00
Michael Walker
69e0890ecd Make Conc a MonadRef/MonadAtomicRef.
Closes #72.
2017-02-26 03:17:02 +00:00
Michael Walker
e33e2291f4 Add a note on breaking changes to "Contributing". 2017-02-26 03:16:52 +00:00
Michael Walker
90bc451d2a Bump to dejafu-0.5.1.1 2017-02-25 06:03:58 +00:00
Michael Walker
95eed7524c Add a test case to replicate issue 71. 2017-02-25 06:01:59 +00:00
Michael Walker
b3c96f1f99 Correctly update the prior action following subconcurrency.
Fixes #71.
2017-02-25 05:53:08 +00:00
Michael Walker
6c1ecfb715 Return the final decision from runConcurrent. 2017-02-25 05:44:29 +00:00
Michael Walker
3efc8acaed Throw error in incorporateTrace if no to-do points. 2017-02-25 05:33:29 +00:00
Michael Walker
0079254b8b Bump to dejafu-0.5.1.0 2017-02-25 01:16:46 +00:00
Michael Walker
332f93d0bd Add strict variants of runSCT and resultsSet. 2017-02-25 01:13:44 +00:00
Michael Walker
78c26b3636 Bring back the NFData instances. 2017-02-25 01:13:44 +00:00
Michael Walker
730ae46609 Derive some missing Eq instances. 2017-02-25 01:13:44 +00:00
Michael Walker
5f555b9f61 Bump dejafu to 0.5.0.2. 2017-02-22 17:17:23 +00:00
Michael Walker
5a667c8136 Introduce an action to end subconcurrency.
Closes #67.
2017-02-22 16:54:49 +00:00
Michael Walker
e274af1664 Give same an explicit type annotation.
Closes #66.
2017-02-22 16:24:24 +00:00
Michael Walker
5e218b91e9 Inherit the number of capabilities in a subconcurrent environment.
Closes #68.
2017-02-22 16:24:24 +00:00
Michael Walker
673a7bb659 Bump to dejafu-0.5.0.1 2017-02-21 05:19:16 +00:00
Michael Walker
5e00918e57 WillReadMVar is a release action as the thread may block. 2017-02-21 05:18:07 +00:00
Michael Walker
300d1d462a Unify Ref/CRef/Var/MVar naming.
This was a holdover from old-dejafu, where there were CRefs and CVars,
so referring to them as "Ref" and "Var" everywhere made sense as a
convenient shorthand. But then "CVar" became "MVar" and the convention
made less sense.
2017-02-21 00:00:37 +00:00
Michael Walker
12335e0090 Add tryReadMVar to MonadConc and dejafu.
Also pins the version of "concurrency" that dejafu depends on down to
the third digit, as additions to `MonadConc` will break dejafu.

Closes #62.
2017-02-20 23:42:08 +00:00
Michael Walker
285bf3ed87 Remove unused indexing feature of findSchedulePrefix. 2017-02-20 21:15:23 +00:00
Michael Walker
f9da4c43a9 Remove unused imports. 2017-02-20 20:28:25 +00:00
Michael Walker
110629f353 Derive Eq for ThreadAction and Lookahead. 2017-02-20 20:28:25 +00:00
Michael Walker
336199e75b Drop _concMessage from MonadConc.
Closes #63.
2017-02-20 20:28:17 +00:00
Michael Walker
71cb670083 Merge branch 'weighted-random' 2017-02-20 04:44:39 +00:00
Michael Walker
f2c6dc69f3 Add tests for random sctRandom. 2017-02-20 04:41:36 +00:00
Michael Walker
f5bf9da038 Update dejafu-tests for new hunit-dejafu interface. 2017-02-20 03:23:46 +00:00
Michael Walker
fdc0190d25 Expose Way in tasty-dejafu.
Finally bump the minimum version of dejafu in tasty-dejafu too!
2017-02-20 03:17:22 +00:00
Michael Walker
c6346b7104 Expose Way in hunit-dejafu.
This (finally!) bumps the minimum version of dejafu in hunit-dejafu.
2017-02-20 03:02:33 +00:00
Michael Walker
858f286e05 Move defaults from Test.DejaFu.SCT to Test.DejaFu. 2017-02-20 02:08:38 +00:00
Michael Walker
a240b48d1f Generalise all dejafu*' functions to work with any Way. 2017-02-20 02:05:19 +00:00
Michael Walker
bc8b123cdd Add an abstraction over 'sctBound' and 'sctRandom'. 2017-02-20 01:50:12 +00:00
Michael Walker
6c8ef4ca09 Implement a weighted random scheduler. 2017-02-20 01:03:18 +00:00
Michael Walker
c06615b001 Merge 'sctBound' and 'sctBounded'. 2017-02-20 00:45:51 +00:00
Michael Walker
75d2b6ca73 Merge branch 'subconcurrency' 2017-02-18 20:45:15 +00:00
Michael Walker
0fd9ea7613 Avoid some allocation.
A few notes:

- The removal of the `preEmps` stuff from `findSchedulePrefix`:

    This has been in dejafu from near the beginning, on the assumption
    that it was somehow an optimisation which would lead to a more
    efficient exploration of the schedules. I can't really remember
    the original justification. Well, it's not, it's actually a huge
    pessimisation.

- The removal of the `pruneCommits` stuff from `sctBounded`:

    Another algorithmic "optimisation" that is actually a large
    pessimisation! Past-barrucadu should be ashamed. It's conceivable
    that `pruneCommits` is a win in programs which have a large
    amount of relaxed memory *and* synchronised stuff going on, but I
    can't really think of such a use-case.

- The un-tupling of `dependency` and `updateDepState`:

    This makes me sad. I find the tuples to be good extra
    documentation in the types, as the things which were paired
    logically go together and shouldn't be separated. However, the
    tuples were constructed at the call-site, and deconstructed in the
    body, so the allocation was just a waste.

- Catenating lists:

    If the order doesn't matter, then it's better to put the shorter
    list first, this is because the spine of the first argument to
    `(++)` gets reallocated. Even better, rewrite the code to not
    concat: can it operate on the list of lists directly?

- Data structures as control structures:

    It's often said that in Haskell we use laziness to let us use data
    structures as control structures. This is true, but don't use it
    as an excuse to write really naive code and just trust the data
    structures to magically make everything better for us!

- Not forcing full evaluation in the DPOR scheduler:

    This was definitely a win at one time, avoiding a huge
    multi-gigabyte space leak. Laziness is a fickle beast, however,
    and this is no longer a win.

    As the NFData instances are no longer used anywhere, they are
    removed and the deepseq dependency is dropped.

- Inline inner loops:

    (this may be an effect of compiling with profiling messing up the
    inliner)

    If a small function is used as the inner "loop" of a recursive
    definition, try sticking an `{-# INLINE ... #-}` pragma on
    it. Allocation seems to go up a little but time tends to go down
    more.

Net effect of this commit on the execution of dejafu-tests, compiled
with profiling, on my desktop:

Before:

> total time  = 298.20 secs   (298199 ticks @ 1000 us, 1 processor)
> total alloc = 111,135,182,008 bytes  (excludes profiling overheads)

After:

> total time  = 140.70 secs   (140702 ticks @ 1000 us, 1 processor)
> total alloc = 46,653,034,384 bytes  (excludes profiling overheads)
2017-02-18 17:30:43 +00:00
Michael Walker
df82f42d5f Don't infer SCT dependencies across subconcurrency boundaries. 2017-02-08 15:00:55 +00:00