Commit Graph

12 Commits

Author SHA1 Message Date
Jonathan Reem
d3a62fa0d5 Add get_mut for modifying the typed representation of Headers.
Also adds an associated test and updates code to use it instead
of cloning and setting when possible.
2014-09-27 00:17:59 -04:00
Jonathan Reem
858a09304a Remove get and rename get_ref to get
Since `get_ref` (now `get`) takes `&self` there is no need
for a special cloning method.
2014-09-27 00:17:59 -04:00
Jonathan Reem
91cc29e0aa Fixed a race condition in get_ref
If two threads attempted to `get_ref` the same Header under two
representations, then it was possible that the second thread would
overwrite the work of the first thread, causing the first thread
to do an unchecked downcast to the wrong type.

In the case where they were the same Header representation, then the
only damage would be that it would be parsed twice and would possibly
return a false negative in one thread.

The new code checks that it was not a queued lock and will not override
the work of another thread, but will accept it if the other thread parsed
the header as the same type. This also prevents duplicate parsing.
2014-09-27 00:17:58 -04:00
Jonathan Reem
90dbef1d03 Add tests for double-reads for Header to ensure safety. 2014-09-27 00:17:58 -04:00
Jonathan Reem
d00fc14765 Store Header Items behind an RWLock
This removes the need to receive `&mut self` in `get_ref` and `get.`

Since the interior mutability of the RWLock is needed only once,
it is safe to change the lifetime of the pointer given by read locks
as by then all mutation has been done.

Since `set` still requires `&mut self` there is no way to use the interior
mutability of the RWLock to modify an existing `&`-reference. However,
the use of interior mutability in `get_ref` means that `get_raw` is now
actually an unsafe operation because the (now `*const`) pointer could be
invalidated by a subsequent call to `get_ref.`

Fixes #47
2014-09-27 00:17:58 -04:00
Jonathan Reem
8f35a03f51 Use the entry API instead of find_or_insert. 2014-09-26 22:59:13 -04:00
Sean McArthur
0191bff43a property treat header names as case insensitive 2014-09-23 09:02:58 -07:00
Jonathan Reem
7065a3f946 Disallow parsing as multiple types to prevent transient errors. 2014-09-16 16:31:05 -07:00
Jonathan Reem
fdcd25356d Refactor Header representation to not store the raw representation
This disallows reparsing, but since that can be a significant source
of errors I think this is actually beneficial.

This also refactors to avoid storing the TypeId, though that is less
of a gain.
2014-09-15 19:21:21 -07:00
Sean McArthur
a0c4edb6e5 adjust representation of internal Items 2014-09-14 10:26:47 -07:00
Jonathan Reem
2aabf1b8e6 Rename rfc7230 to http to more clearly indicate its purpose. 2014-09-09 17:37:01 -07:00
Jonathan Reem
f2c09c5743 Split common headers into a submodule and into their own files
This is a more extensible place to put them and doesn't clutter up
header/mod.rs as much as the old scheme did.

Fixes #8
2014-09-08 16:20:50 -07:00