Broker 1.2.8
============

- Fix unusable subscriber.poll() method in Python bindings.

Broker 1.2.7
============

Change topic strings to not automatically alter slashes

Automatically removing trailing or consecutive slashes in topic strings
prevents uniquely targeting topic names to a node.

For example, publishing to "node-10/" should not match a subscription
for "node-1/", but that's what happens with prefix-based matching if the
trailing slash is automatically removed.

Broker 1.2.6
============

Fix a race condition in data store flare operations

The race (as seen via Zeek usage) goes like:

Thread A: enqueue item, get suspended
Thread B: sees mailbox has items
Thread B: dequeue item
Thread B: extinguish flare
Thread A: resume, fire flare

That ordering can leave the flare in an active state without any actual
items remaining in the mailbox.

This patch adds a mutex/lock such that extinguishing of the flare cannot
be interleaved between the enqueue and firing of the flare.

This likely relates to https://github.com/zeek/zeek/issues/838
https://github.com/zeek/zeek/issues/716, as well as this thread
http://mailman.icsi.berkeley.edu/pipermail/zeek/2020-February/015062.html

Broker 1.2.0
============

This release contains breaking API changes (for C++ code, not Python)
in order to increase messaging efficiency via reduction of data
copying.  Specifically:

- ``broker::subscriber::get()`` now returns a different, copy-on-write
  type called ``broker::data_message`` rather than an
  ``std::pair<topic, data>``.  For example this old code::

      auto sub = ep.make_subscriber({"/topic/test"});
      auto msg = sub.get();
      auto& topic = msg.first;
      auto& data = msg.second

  can be changed to::

      auto sub = ep.make_subscriber({"/topic/test"});
      auto msg = sub.get();
      auto& topic = broker::get_topic(msg);
      auto& data = broker::get_data(msg);

- ``broker::endpoint::publish(vector)`` now takes a vector of the new
  ``broker::data_message`` type, not ``std::pair<topic, data>``

- Generally, all type aliases within classes, like
  ``value_type = std::pair<topic, data>``, have been changed to use the
  new ``broker::data_message`` type.

- The semantics of message forwarding have changed slightly: the
  first sender of the message is now the one that applies the initial
  TTL value.  Previously, the first receiver would be the one to
  apply the initial TTL.
