c11tester.git
9 years agodeal with looping due to bogus future value via promise expiration
Brian Demsky [Wed, 12 Sep 2012 22:12:31 +0000 (15:12 -0700)]
deal with looping due to bogus future value via promise expiration
fix promise bug

9 years agofun issues...
Brian Demsky [Wed, 12 Sep 2012 09:52:34 +0000 (02:52 -0700)]
fun issues...
(1) need to compute promises for rmw nodes...they could satisfy them
(2) don't call rmwedge if you don't know where you are reading from yet
(3) miscopied commit from big merge (already_added -> !already_added)
(4) avoid adding rmw edges back to itself
(5) probably worth adding a check that the execution isfeasible before sending future values
(6) resolve promises should add rmwedges when appropriate
(7) fix seq_cst to mask earlier writes..

9 years agothreads, model, schedule: refactor thread joining
Brian Norris [Wed, 12 Sep 2012 02:48:38 +0000 (19:48 -0700)]
threads, model, schedule: refactor thread joining

The Thread can hold a list of ModelAction (instead of Threads) that are waiting
for its completion. This will give the exiting Thread a better ability to
handle the event.

This also deletes Scheduler::wait, since it is no superceded by Scheduler::sleep.

9 years agomodel: add ModelChecker::get_thread(ModelAction *act)
Brian Norris [Wed, 12 Sep 2012 02:45:57 +0000 (19:45 -0700)]
model: add ModelChecker::get_thread(ModelAction *act)

Many times, I need to convert ModelAction to a Thread. Overload get_thread() to
make it easier to use.

9 years agoschedule: add sleep() function
Brian Norris [Wed, 12 Sep 2012 02:38:50 +0000 (19:38 -0700)]
schedule: add sleep() function

The wait() and wake() functions are not very complementary. I will be removing
wait() in favor of a simpler sleep() function, which is introduced here.

9 years agocyclegraph: add non-NULL assertions
Brian Norris [Wed, 12 Sep 2012 00:54:29 +0000 (17:54 -0700)]
cyclegraph: add non-NULL assertions

9 years agoMerge branch 'demsky'
Brian Norris [Wed, 12 Sep 2012 00:52:02 +0000 (17:52 -0700)]
Merge branch 'demsky'

Branch cleaned up by Brian Norris

9 years agomodel: cleaning up some code
Brian Demsky [Tue, 11 Sep 2012 03:17:10 +0000 (20:17 -0700)]
model: cleaning up some code

9 years agomodel: handle RMW, unresolved reads in w_modification_order checks
Brian Norris [Tue, 11 Sep 2012 18:43:18 +0000 (11:43 -0700)]
model: handle RMW, unresolved reads in w_modification_order checks

9 years agomodel: fix the maxreads support
Brian Demsky [Mon, 10 Sep 2012 00:43:20 +0000 (17:43 -0700)]
model: fix the maxreads support

9 years agomodel: some bug fixes to the model checker
Brian Demsky [Sun, 9 Sep 2012 09:25:47 +0000 (02:25 -0700)]
model: some bug fixes to the model checker

9 years agolinuxrwlocks: two bug fixes; guess the model checker helps find bugs
Brian Demsky [Sun, 9 Sep 2012 09:25:47 +0000 (02:25 -0700)]
linuxrwlocks: two bug fixes; guess the model checker helps find bugs

9 years agomodel: bug fixes to new code
Brian Demsky [Sun, 9 Sep 2012 02:37:11 +0000 (19:37 -0700)]
model: bug fixes to new code

9 years agocyclegraph: support rolling back changes
Brian Demsky [Sun, 9 Sep 2012 02:37:11 +0000 (19:37 -0700)]
cyclegraph: support rolling back changes

9 years agomodel: replace action conditions with switch block
Brian Norris [Tue, 11 Sep 2012 19:24:15 +0000 (12:24 -0700)]
model: replace action conditions with switch block

9 years agomodel: add check_recency()
Brian Norris [Tue, 11 Sep 2012 17:20:06 +0000 (10:20 -0700)]
model: add check_recency()

Note the weaknesses of the code, as documented in @todo.

9 years agomodel: refactor "get next thread" code
Brian Norris [Tue, 11 Sep 2012 18:19:50 +0000 (11:19 -0700)]
model: refactor "get next thread" code

get_next_replay_thread() might as well handle all the Thread decisions for the
model-checker. Refactor, and rename to get_next_thread().

9 years agomodel: add too_many_reads flag
Brian Norris [Tue, 11 Sep 2012 17:19:46 +0000 (10:19 -0700)]
model: add too_many_reads flag

9 years agonodestack: add get_read_from_size()
Brian Norris [Tue, 11 Sep 2012 17:19:10 +0000 (10:19 -0700)]
nodestack: add get_read_from_size()

9 years agomain: add "maxreads" parameter
Brian Norris [Tue, 11 Sep 2012 17:10:39 +0000 (10:10 -0700)]
main: add "maxreads" parameter

9 years agomain: add parameter parsing
Brian Norris [Sat, 8 Sep 2012 07:38:03 +0000 (00:38 -0700)]
main: add parameter parsing

Only has a help message for now.

9 years agomodel: fix release sequence with RMW, acq vs. acq/rel
Brian Norris [Sat, 8 Sep 2012 06:36:00 +0000 (23:36 -0700)]
model: fix release sequence with RMW, acq vs. acq/rel

Check in a bugfix from Brian D

9 years agomodel: maintain a count of the pending lazy synchronizations
Brian Norris [Fri, 7 Sep 2012 20:12:46 +0000 (13:12 -0700)]
model: maintain a count of the pending lazy synchronizations

lazy_sync_size should be the sum of the size of all the lists in
lazy_sync_with_release.

9 years agomodel: group snapshottable ModelChecker members in struct
Brian Norris [Fri, 7 Sep 2012 19:58:06 +0000 (12:58 -0700)]
model: group snapshottable ModelChecker members in struct

These items shouldn't be reset individually, but rather should be grouped
together and allocated on the snapshotting heap. This puts us a step closer to
utilizing partial rollback within executions.

9 years agomodel: force THREAD_START to immediately follow THREAD_CREATE
Brian Norris [Fri, 7 Sep 2012 18:25:25 +0000 (11:25 -0700)]
model: force THREAD_START to immediately follow THREAD_CREATE

Note that on the current userprog.c test case, this change causes more
infeasible executions to appear. This is somewhat unexpected but probably just
a result of sub-optimal scheduling.

9 years agomodel: fix release_seq for open-ended synchronization
Brian Norris [Fri, 7 Sep 2012 17:38:58 +0000 (10:38 -0700)]
model: fix release_seq for open-ended synchronization

This fix handles the case where a thread may not yet have synchronized in a way
that ensures no future writes may break a release sequence. If we encounter
such a thread, we can return false (uncertain) and re-check this potential
release sequence later in the execution.

9 years agomodel: use std::find for release sequence search
Brian Norris [Fri, 7 Sep 2012 17:31:08 +0000 (10:31 -0700)]
model: use std::find for release sequence search

9 years agomodel: don't use global 'model' unnecessarily
Brian Norris [Fri, 7 Sep 2012 17:16:41 +0000 (10:16 -0700)]
model: don't use global 'model' unnecessarily

9 years agochanges
Brian Demsky [Fri, 7 Sep 2012 06:48:25 +0000 (23:48 -0700)]
changes

9 years agoMerge branch 'master' of ssh://demsky.eecs.uci.edu/home/git/model-checker
Brian Demsky [Fri, 7 Sep 2012 01:56:39 +0000 (18:56 -0700)]
Merge branch 'master' of ssh://demsky.eecs.uci.edu/home/git/model-checker

check in my stuff...

Conflicts:
model.cc
threads.h

9 years agochanges
Brian Demsky [Fri, 7 Sep 2012 01:32:56 +0000 (18:32 -0700)]
changes

9 years agoMerge branch 'norris'
Brian Norris [Thu, 6 Sep 2012 23:16:51 +0000 (16:16 -0700)]
Merge branch 'norris'

Fixes up some THREAD_JOIN behavior, cleaning up a little bit of general model-checker structure.

9 years agomodel: complete the Thread teardown during THREAD_FINISH
Brian Norris [Thu, 6 Sep 2012 21:07:44 +0000 (14:07 -0700)]
model: complete the Thread teardown during THREAD_FINISH

9 years agomodel: enforce rule: current_action != NULL
Brian Norris [Thu, 6 Sep 2012 21:04:09 +0000 (14:04 -0700)]
model: enforce rule: current_action != NULL

Now that I've fixed THREAD_JOIN, modify the comments and safety checks.

9 years agolibthreads: don't spin on THREAD_JOIN
Brian Norris [Thu, 6 Sep 2012 20:55:05 +0000 (13:55 -0700)]
libthreads: don't spin on THREAD_JOIN

THREAD_JOIN can now be implemented properly here. We shouldn't have to spin,
waiting for another thread to complete. This may help improve the ModelChecker
architecture, since we will never have NULL actions passed to the ModelChecker.

9 years agomodel: hook up THREAD_JOIN and THREAD_FINISH actions
Brian Norris [Thu, 6 Sep 2012 20:54:06 +0000 (13:54 -0700)]
model: hook up THREAD_JOIN and THREAD_FINISH actions

9 years agoschedule: add wait and wake functions
Brian Norris [Thu, 6 Sep 2012 20:37:35 +0000 (13:37 -0700)]
schedule: add wait and wake functions

These functions will be used to prevent execution of threads that should be
waiting for another event (e.g., a THREAD_JOIN should cause a thread to wait
for another thread's exit).

9 years agothreads: fixup THREAD_READY comment
Brian Norris [Thu, 6 Sep 2012 20:47:12 +0000 (13:47 -0700)]
threads: fixup THREAD_READY comment

This state will be used for more than just a context switch, so reword the
comment.

9 years agothreads: add THREAD_BLOCKED state
Brian Norris [Thu, 6 Sep 2012 20:41:12 +0000 (13:41 -0700)]
threads: add THREAD_BLOCKED state

To signal that a Thread cannot yet be added back to the Scheduler's ready list.

9 years agothreads: add a wait_list
Brian Norris [Thu, 6 Sep 2012 20:17:06 +0000 (13:17 -0700)]
threads: add a wait_list

This list will contain all Threads that are waiting on the current Thread. Will
be used for Thread joins, in particular.

9 years agothreads: add is_complete() helper function
Brian Norris [Thu, 6 Sep 2012 20:10:11 +0000 (13:10 -0700)]
threads: add is_complete() helper function

9 years agoaction: add THREAD_FINISH action
Brian Norris [Thu, 6 Sep 2012 20:07:26 +0000 (13:07 -0700)]
action: add THREAD_FINISH action

For cleanly finalizing a thread.

9 years agosnapshot-interface: debug prints: lengthen the "regionname" field
Brian Norris [Thu, 6 Sep 2012 18:43:06 +0000 (11:43 -0700)]
snapshot-interface: debug prints: lengthen the "regionname" field

9 years agoworking towards making datarace detection work
Brian Demsky [Thu, 6 Sep 2012 06:04:30 +0000 (23:04 -0700)]
working towards making datarace detection work

9 years agobug in race detector
Brian Demsky [Wed, 5 Sep 2012 07:27:23 +0000 (00:27 -0700)]
bug in race detector

9 years agoanother example
Brian Demsky [Wed, 5 Sep 2012 06:28:00 +0000 (23:28 -0700)]
another example

9 years agomodel: document ModelChecker::check_current_action
Brian Norris [Tue, 4 Sep 2012 21:13:28 +0000 (14:13 -0700)]
model: document ModelChecker::check_current_action

9 years agomodel: check_current_action returns its 'nextThread'
Brian Norris [Tue, 4 Sep 2012 20:08:46 +0000 (13:08 -0700)]
model: check_current_action returns its 'nextThread'

To begin some code structure rearrangements, I make check_current_action()
return the 'nextThread' value as a true return value. Eventually, the
nextThread field might not be needed, and the model-checker behavior might make
more sense...

9 years agomodel/schedule: revise 'nextThread' data flow
Brian Norris [Tue, 4 Sep 2012 19:45:49 +0000 (12:45 -0700)]
model/schedule: revise 'nextThread' data flow

The ModelChecker::nextThread field was being abused a little in my aging
design. It really should be either a private field (not accessed even via
accessors) or else just a return value / function parameter.

This commit makes a change so that nextThread is a Thread pointer and is
directly supplied to the Scheduler. If it is NULL, then the Scheduler is
allowed to pick its own Thread to run.

9 years agoaction: print '?' for unknown read-from-future
Brian Norris [Tue, 4 Sep 2012 17:59:47 +0000 (10:59 -0700)]
action: print '?' for unknown read-from-future

To provide more informative debugging traces, use a placeholder '?' as the "Rf"
value when printing a 'read' ModelAction that has no reads-from value. This
helps, for instance, when manually identifying problem points in an infeasible
execution.

9 years agomodel: re-check release sequences lazily
Brian Norris [Fri, 24 Aug 2012 00:54:39 +0000 (17:54 -0700)]
model: re-check release sequences lazily

For now, I write this "lazy check" as follows:

Whenever one of the following occurs:
* a Promise is fulfilled
* a mo_graph edge is added

Then I recheck all the actions (for the relevant object location) that are
waiting in the lazy release head queue.

9 years agomodel: add resolve_release_sequences() function
Brian Norris [Sat, 25 Aug 2012 01:37:15 +0000 (18:37 -0700)]
model: add resolve_release_sequences() function

This function can check for release sequence resolutions then propagate
synchronization and remove from the "lazy release" list. It does not add any
new mo_graph edges yet.

9 years agomodel: stash actions for lazy release-seq checking
Brian Norris [Thu, 23 Aug 2012 02:16:58 +0000 (19:16 -0700)]
model: stash actions for lazy release-seq checking

Build up lists of actions to lazily check for new release sequence
developments.

9 years agomodel: report 'updates' when adding mo_graph edges
Brian Norris [Fri, 24 Aug 2012 00:47:31 +0000 (17:47 -0700)]
model: report 'updates' when adding mo_graph edges

The rest of the model checker would like to know if any edges were added. Add a
boolean return value to report this.

9 years agomodel: report status of resolved promises
Brian Norris [Fri, 24 Aug 2012 00:50:21 +0000 (17:50 -0700)]
model: report status of resolved promises

The rest of the model checker needs to know when promises are added, so add a
return status as a boolean.

9 years agoaction, clockvector: add 'has_synchronized_with()' functions
Brian Norris [Thu, 23 Aug 2012 19:31:08 +0000 (12:31 -0700)]
action, clockvector: add 'has_synchronized_with()' functions

These functions will check whether a ClockVector (or corresponding ModelAction)
is *completely* synchronized with another already. This is different from
simply "happens before," because I may need to update and propagate a clock
vector after initial execution as more information becomes available, and so
this function helps determine whether a particular pair of vectors is worth
merging (and then - expensively - propagating) before actually performing the
synchronization.

[Not documented properly yet...]

9 years agoaction: make synchronize_with() public
Brian Norris [Thu, 23 Aug 2012 19:30:27 +0000 (12:30 -0700)]
action: make synchronize_with() public

9 years agoaction: utilize release sequence(s) for synchronization
Brian Norris [Wed, 15 Aug 2012 00:37:32 +0000 (17:37 -0700)]
action: utilize release sequence(s) for synchronization

Instead of checking only the trivial release sequence (i.e., a read-acquire
reads directly from a write-release) for establishing synchronization, make use
of the ModelChecker's more complete 'get_release_seq_head()' functionality,
then loop through all release heads and synchronize with each. This is
necessary because a read-acquire may synchronize with more than one
store-release.

Note that this step only implements support based on present knowledge. The
incomplete knowledge of the modification order, as given in mo_graph, as well
as "reading from the future" may require lazy checking.

9 years agomodel: add release sequence support
Brian Norris [Wed, 15 Aug 2012 00:21:29 +0000 (17:21 -0700)]
model: add release sequence support

The ModelChecker now can find the head(s) of the release sequence(s) with which
a particular ModelAction (read-acquire) will synchronize.

The ModelChecker::release_seq_head function can locate a release sequence head
for a given ModelAction, based on information at a given moment. That is, it
knows happens-before and modification information for the present, but some
decisions may need to be made in the future as reads-from promises are
fulfilled or modification ordering is observed by future reads and writes.

Lazy checking for the latter cases has yet to be implemented.

9 years agomodel: change pointer spacing style
Brian Norris [Fri, 24 Aug 2012 00:52:46 +0000 (17:52 -0700)]
model: change pointer spacing style

9 years agoaction: (assertion) disallow out-of-order synchronization
Brian Norris [Thu, 23 Aug 2012 02:15:04 +0000 (19:15 -0700)]
action: (assertion) disallow out-of-order synchronization

We build our ModelChecker around the assumption that synchronization never
occurs counter to the execution order. This assertion lets us know if that
fails.

9 years agomodel: improve some promise-related comments
Brian Norris [Thu, 23 Aug 2012 02:08:50 +0000 (19:08 -0700)]
model: improve some promise-related comments

9 years agoaction: update 'reads_from' field before synchronization
Brian Norris [Mon, 20 Aug 2012 22:59:25 +0000 (15:59 -0700)]
action: update 'reads_from' field before synchronization

As the ModelChecker's release/acquire functionality gets more complex,
it makes more sense to assign the ModelAction::reads_from field before
checking synchronization. Currently, this makes no change in behavior.

9 years agonodestack: turn magic promise numbers into enum + typedef
Brian Norris [Wed, 22 Aug 2012 23:45:55 +0000 (16:45 -0700)]
nodestack: turn magic promise numbers into enum + typedef

Document the enum properly, since it's quite unclear what these flags really
mean.

9 years agonodestack, model: use uniform spacing, style
Brian Norris [Wed, 22 Aug 2012 23:02:48 +0000 (16:02 -0700)]
nodestack, model: use uniform spacing, style

9 years agonodestack: don't use uint32_t
Brian Norris [Wed, 22 Aug 2012 22:56:13 +0000 (15:56 -0700)]
nodestack: don't use uint32_t

uint32_t (and similar) should only be used when an exact field-size is needed
across platforms with different integer sizes. In this case, we only need an
unsigned type, so just use unsigned int.

9 years agonodestack: remove unnecessary typedefs
Brian Norris [Wed, 22 Aug 2012 22:51:43 +0000 (15:51 -0700)]
nodestack: remove unnecessary typedefs

These typedefs are used once or twice and don't add much meaning.

9 years agocyclegraph: add public CycleGraph::checkReachable()
Brian Norris [Fri, 17 Aug 2012 00:06:31 +0000 (17:06 -0700)]
cyclegraph: add public CycleGraph::checkReachable()

The private CycleGraph::checkReachable() function can be useful externally,
when provided with two ModelActions. This implements a small wrapper for public
usage.

9 years agomodel: correct mo_graph comment
Brian Norris [Tue, 21 Aug 2012 06:58:38 +0000 (23:58 -0700)]
model: correct mo_graph comment

My understanding of the mo_graph was incorrect, due to some confusion over the
CycleGraph interfaces. Correct this.

9 years agocyclegraph: straighten out header vs. implementation vs. usage
Brian Norris [Tue, 21 Aug 2012 06:56:10 +0000 (23:56 -0700)]
cyclegraph: straighten out header vs. implementation vs. usage

The CycleGraph::addEdge and CycleGraph::addRMWEdge functions were a little
confusing to use, since their implementation and header prototypes had
different parameter naming. This swapped the 'to' and 'from' naming, such that
it appeared as if the addEdge() users were adding edges in the reverse
direction. The functionality was not actually incorrect, but my understanding
was...

This corrects the naming and switches the order of the arguments.

9 years agopromise: rewrite into a simpler header file
Brian Norris [Mon, 20 Aug 2012 19:11:42 +0000 (12:11 -0700)]
promise: rewrite into a simpler header file

9 years agoMakefile: rewrite header dependencies
Brian Norris [Fri, 10 Aug 2012 18:52:36 +0000 (11:52 -0700)]
Makefile: rewrite header dependencies

We shouldn't need to add new files in 3 different places. Automatically
generate most of this using GCC's '-MM' option.

9 years agomodel: document ModelChecker::mo_graph
Brian Norris [Mon, 20 Aug 2012 18:22:32 +0000 (11:22 -0700)]
model: document ModelChecker::mo_graph

The modification order graph is a complex data structure, and there are a few
pieces of high-level information that should be noted. For example, the edges
are actually directed from most recent to oldest, which is somewhat in reverse
of the usage in the literature, where

  a --mo--> b

means that a comes *before* b in the modification order. This convention can be
changed in the future, but it should be documented here.

9 years agomodel: rename 'cyclegraph' to 'mo_graph'
Brian Norris [Mon, 20 Aug 2012 18:03:36 +0000 (11:03 -0700)]
model: rename 'cyclegraph' to 'mo_graph'

This is not just an arbitrary graph with cycle-detection; it is specifically a
representation of the modification order of various atomic objects.

9 years agomodel: don't "leak" promises
Brian Norris [Mon, 20 Aug 2012 19:53:28 +0000 (12:53 -0700)]
model: don't "leak" promises

9 years agotest/Makefile: remove pointless variable
Brian Norris [Fri, 17 Aug 2012 00:40:40 +0000 (17:40 -0700)]
test/Makefile: remove pointless variable

9 years ago.gitignore: don't ignore /model anymore
Brian Norris [Fri, 17 Aug 2012 00:11:27 +0000 (17:11 -0700)]
.gitignore: don't ignore /model anymore

We don't produce an executable named 'model' anymore.

9 years agoMerge branch 'norris'
Brian Norris [Thu, 16 Aug 2012 17:40:59 +0000 (10:40 -0700)]
Merge branch 'norris'

9 years agoschedule: make print() const
Brian Norris [Fri, 10 Aug 2012 23:20:15 +0000 (16:20 -0700)]
schedule: make print() const

Switch to using a "const_iterator" so that the whole function becomes const.

9 years agomodel: privatize check_current_action()
Brian Norris [Fri, 10 Aug 2012 22:27:38 +0000 (15:27 -0700)]
model: privatize check_current_action()

9 years agothreads: correct 'swap()' documentation
Brian Norris [Fri, 10 Aug 2012 22:22:33 +0000 (15:22 -0700)]
threads: correct 'swap()' documentation

Some of the swap() documentation was duplicated incorrectly. While I'm at it,
make the descriptions more clear and precise.

9 years agomain, model: don't 'initialize' system_context
Brian Norris [Fri, 10 Aug 2012 22:15:24 +0000 (15:15 -0700)]
main, model: don't 'initialize' system_context

I was unnecessarily giving main.cc control of the system_context variable,
since I thought I needed to use getcontext() before entering the model checker.
However, the structure of the runtime scheduling is such that this
"initialization" would be obliterated by the first swapcontext() call
(switching form system-context to user-context).

So, the point is that the model-checker can just declare its own
("uninitialized") context that will be initialized as soon as the model-checker
makes a thread swap. Thus, I remove the external interface for initializing the
context (set_system_context()).

9 years agoaction: don't merge twice in read_from()
Brian Norris [Fri, 10 Aug 2012 21:59:20 +0000 (14:59 -0700)]
action: don't merge twice in read_from()

synchronize_with() already takes care of the clock vector merging, so don't
merge a second time.

9 years agoaction: rework/rename 'synchronized()' to 'synchronize_with()'
Brian Norris [Fri, 10 Aug 2012 21:57:20 +0000 (14:57 -0700)]
action: rework/rename 'synchronized()' to 'synchronize_with()'

Fix some comments, names, etc.

Privatize synchronized()/synchronize_with(), since it's only intended for
within other wrapper actions performed on ModelAction.

9 years agomodel: remove useless return code from add_thread()
Brian Norris [Fri, 10 Aug 2012 21:51:27 +0000 (14:51 -0700)]
model: remove useless return code from add_thread()

9 years agoschedule, threads: update comments, const's
Brian Norris [Fri, 10 Aug 2012 21:43:19 +0000 (14:43 -0700)]
schedule, threads: update comments, const's

9 years agomodel: make scheduler private
Brian Norris [Fri, 10 Aug 2012 21:29:06 +0000 (14:29 -0700)]
model: make scheduler private

To accomplish this, I needed to add one accessor method for
'get_current_thread()'.

9 years agomain, model: move main execution loop into ModelChecker class
Brian Norris [Fri, 10 Aug 2012 21:23:29 +0000 (14:23 -0700)]
main, model: move main execution loop into ModelChecker class

9 years agocyclegraph: improve comments, use initializer list
Brian Norris [Tue, 14 Aug 2012 22:25:11 +0000 (15:25 -0700)]
cyclegraph: improve comments, use initializer list

10 years agohashtable: document get_safe_ptr()
Brian Norris [Sat, 11 Aug 2012 01:11:12 +0000 (18:11 -0700)]
hashtable: document get_safe_ptr()

10 years agohashtable: rename ensureptr() to get_safe_ptr()
Brian Norris [Sat, 11 Aug 2012 01:10:20 +0000 (18:10 -0700)]
hashtable: rename ensureptr() to get_safe_ptr()

ensureptr() is kind of vague. This rename -- along with some better description
-- will help clarify what this function does.

10 years agohashtable: bugfix - increment size only when new bins are linked
Brian Norris [Sat, 11 Aug 2012 00:44:36 +0000 (17:44 -0700)]
hashtable: bugfix - increment size only when new bins are linked

In both put() and ensureptr(), the 'size' counter should not be incremented
until we decide if we're adding a new bin or not. When incremented improperly,
'size' ended up out of sync with the hash table; it reported a size much larger
than the actual table.

10 years agohashtable: some refactoring, signed-ness
Brian Norris [Sat, 11 Aug 2012 00:42:40 +0000 (17:42 -0700)]
hashtable: some refactoring, signed-ness

Since 'capacity' is unsigned, so should the index that compares with it.

The (duplicated) compare/resize code can be a bit shorter and (IMO) easier to
read.

10 years agomodel: reformat/refactor some code
Brian Norris [Fri, 10 Aug 2012 19:21:12 +0000 (12:21 -0700)]
model: reformat/refactor some code

10 years agoimpatomic.h: fixup spacing
Brian Norris [Fri, 10 Aug 2012 18:44:00 +0000 (11:44 -0700)]
impatomic.h: fixup spacing

Tabs vs. spaces for indentation screws up this indentation, making it even
harder to read than it should be. Switch this all to spaces (for uniformity
across all editor configurations) and align things properly.

10 years agothreads: trivial change
Brian Norris [Wed, 8 Aug 2012 23:36:10 +0000 (16:36 -0700)]
threads: trivial change

10 years agomodel: revert unnecessary parameter for print_summary()
Brian Norris [Wed, 8 Aug 2012 23:27:07 +0000 (16:27 -0700)]
model: revert unnecessary parameter for print_summary()

CycleGraph::checkForCycles() is a cheap function; it only checks a flag status.
So we don't need to make code more complicated just to avoid calling this
function.

Effectively a revert of:
commit 7cee72d776ddfbf585038f3cad3df799e353cc11

10 years agoadd basic parameter handling
Brian Norris [Wed, 8 Aug 2012 22:22:25 +0000 (15:22 -0700)]
add basic parameter handling

10 years agocommon: add error_msg() function
Brian Norris [Wed, 8 Aug 2012 22:00:13 +0000 (15:00 -0700)]
common: add error_msg() function

10 years agorun.sh: pass command-line arguments through to test program
Brian Norris [Wed, 8 Aug 2012 19:41:02 +0000 (12:41 -0700)]
run.sh: pass command-line arguments through to test program

Once the model-checker begins handling arguments, we should pass through
arguments to the program.