1. 16 Jun, 2016 5 commits
    • David Gibson's avatar
      altstack: Don't log internal calls in test cases · c21a1eff
      David Gibson authored
      altstack/test/run.c uses some hairy macros to intercept the standard
      library functions that altstack uses.  This has two purposes: 1) to
      conditionally cause those functions to fail, and thereby test altstack's
      error paths, and 2) log which of the library functions was called in each
      testcase.
      
      The second function isn't actually useful - for the purposes of testing the
      module, we want to check the actual behaviour, not what calls it made in
      what order to accomplish it.  Explicitly checking the calls makes it much
      harder to change altstack's implementation without breaking the tests.
      Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      c21a1eff
    • David Gibson's avatar
      altstack: Don't use 0 pointer literals · 9683a45f
      David Gibson authored
      In a number of places the altstack module uses a literal '0' for pointer
      values.  That's correct C, but doesn't make it obvious on a quick read
      whether values are integers or pointers.  This patch changes those cases
      to use the NULL define instead.
      Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      9683a45f
    • David Gibson's avatar
      altstack: Use ptrint instead of bare casts · 029a45b8
      David Gibson authored
      Functions invoked with altstack take a void * parameter.  However, the
      test program wants to pass an integer, and so uses the trick of casting
      the integer values to (void *) and back again.
      
      The ptrint() module handles exactly this case in a more portable and
      (somewhat) typesafe way, so use that instead.
      Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      029a45b8
    • David Gibson's avatar
      altstack: Restore alternate signal stack state · 15c555b3
      David Gibson authored
      altstack relies on catching a SIGSEGV caused when overrunning the stack.
      This means that the SEGV handler itself can't use the already overflowed
      stack, and so we use sigaltstack() to assign the signal handler a different
      stack.  On completion, altstack() clears the alternate signal stack.
      
      However, it's possible that the calling program could be using
      sigaltstack() for its own reasons, so it's more correct to restore the
      sigaltstack() state to that from the beginning of the altstack() call.
      This patch implements this behaviour.
      Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      15c555b3
    • David Gibson's avatar
      altstack: Consolidate thread-local variables · 2da0271f
      David Gibson authored
      altstack uses a number of __thread variables to track internal state.  This
      allows altstack to be thread-safe, although it's still not re-entrant.
      This patch gathers all these variables into a single per-thread state
      structure.  This makes it easy to see at a glance what the whole of the
      required state is, and thereby easier to reason about correctness of
      changes to the implementation.
      Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      2da0271f
  2. 06 Jun, 2016 3 commits
  3. 05 Jun, 2016 2 commits
  4. 03 Jun, 2016 1 commit
  5. 02 Jun, 2016 6 commits
  6. 31 May, 2016 3 commits
  7. 09 May, 2016 4 commits
  8. 06 May, 2016 1 commit
  9. 03 May, 2016 2 commits
  10. 29 Apr, 2016 4 commits
  11. 26 Apr, 2016 6 commits
  12. 25 Mar, 2016 3 commits
    • Andrew Jeffery's avatar
      strgrp: Add cosine fudge-curve to unify filter comparison spaces · e8f7a978
      Andrew Jeffery authored
      If we are to use should_grp_score_cos(x,y) as a filter the the following
      relationship must hold (from least to most expensive):
      
              should_grp_score_len(x,y)
                      >= should_grp_score_cos(x,y)
                      >= grp_score(x)
      
      should_grp_score_cos(x,y) wasn't holding up its part of the bargain, so
      real data was used to generate a fudge curve to bring
      should_grp_score_cos(x,y) results into the same space. Really this is a
      terrible hack and the problem needs more thought. Evaluation of
      should_grp_score_cos(x,y)'s performance benefit (given the relaxation of
      the filter under the fudge curve) is sorely needed.
      e8f7a978
    • Andrew Jeffery's avatar
      strgrp: Use angular similarity for distance metric properties · 911a66a7
      Andrew Jeffery authored
      Distance metrics allow us to compare similarity results, however
      applying the change leads to test suite breakage as we no longer satisfy
      the requirement that each filter's score is at most as large as that of
      the previous filter^. As such, also stop ccanlint from executing the
      tests that are known to fail until we work around the problem.
      
      ^ This is a problem that has existed since the introduction of the
      cosine similarity filter, it just wasn't detected by the test suite.
      911a66a7
    • Andrew Jeffery's avatar
      strgrp: Use ratio of hypotenuse for consistent comparisons · 44c0274a
      Andrew Jeffery authored
      Ensure comparing filter results is sensible by using a consistent
      calculation. Note that the cosine similarity measurement doesn't yet
      conform and this can give spurious results that are not detected by the
      test suite.
      44c0274a