- expiration wasn't handled correctly
- objects with no child stems never expired. While this is better for
anonymity, it can cause objects getting stuck
- upon expiration the nodes weren't marked as not having the object, causing it
to not be advertised
- I haven't tested it but at least I don't think can make things worse
It looks like PyOpenCL obsoleted the enqueue_read_buffer method, and
enqueue_copy should be used instead. Even though enqueue_copy already exists
with the earliest version of PyOpenCL I looked at, I wrote it in a
backwards-compatible way so that it doesn't break in case I missed something.
Tested on OSX in frozen mode, but it should be platform-independent.