Changelog
=========

Branches are organized by version. `master` contains the bleeding edge, `2.x`
contains all stable changes up to the latest release of v2, and `1.x` contains
all stable changes of the first version of Recon.

## 2.5.6
  - [Add missing run-time dependency on `syntax_tools`](https://github.com/ferd/recon/pull/111)

## 2.5.5
  - [Fix OTP-26 compiler warnings for OTP-27](https://github.com/ferd/recon/pull/107)

## 2.5.4
  - [Include `erts_mmap` in snapshots to help debug memory issues](https://github.com/ferd/recon/pull/106) (thanks to @garazdawi)

## 2.5.3
  - [Handle dead processes in `recon:info/2` types and edge cases](https://github.com/ferd/recon/pull/97)
  - [Reworking documentation structure to support `ex_doc` and fit in with hex standard](https://github.com/ferd/recon/pull/103)

## 2.5.2
  - [Increase Dialyzer strictness](https://github.com/ferd/recon/pull/88)
  - [Accumulate all block entries in `format_blocks`](https://github.com/ferd/recon/pull/83)
  - [option `io_server` can also be an `atom()` in traces doc](https://github.com/ferd/recon/pull/80)

## 2.5.1
  - Fix support for extra messages in traces (thanks to Péter Gömöri)
  - Fix some typespecs for match specs (thanks to @chenduo)
  - Support OTP-23 change of format in allocator blocks related to carrier migration support

## 2.5.0
  - Optional formatting of records in traces (thanks to @bartekgorny)
  - Basic support for OTP-22 in `recon_alloc` (base handling of `foreign_blocks` type)

## 2.4.0
  - Optional formatting of records in traces (thanks to @bartekgorny)

## 2.3.6
  - Adapting for OTP-21. Includes the 'deprecation' of `recon:files/0`
    since OTP-21 no longer supports listing all file descriptors, and
    removing `error_logger_queue_len` from node stats since a new
    logging mechanism was introduced in-process instead.

## 2.3.5
  - fixing timefold's first iteration to prevent errors at call-site
    by sleeping before sampling

## 2.3.4
  - fixing edoc tag that broke some downstream packaging attempts

## 2.3.3
  - fixing `bin_leak` arith errors
  - fixes to `recon_alloc:allocators/1` (incl. R16 compatibility)
  - fix errors in scheduler wall time calculations
  - `term_to_pid` supports binaries

## 2.3.2
  - Allow the `return_to` option in `recon_trace`
  - More efficient sorting function for procs and ports attributes
    (thanks to @zhongwencool and @pichi)
  - Allow the usage of `return_trace` in `recon_trace:calls/2-3` instead
    of `fun(_) -> return_trace() end`.

## 2.3.1
  - Updated `app_deps` script to run with rebar3 dependencies
  - Minor docs update

## 2.3.0
  - Doc made clearer around semantics of `recon:proc_count` and
    `recon:proc_window`.
  - Fix doc typos
  - Fix potential race condition on waiting for death of tracing process
  - Add an option which allows sending tracing output somewhere other than
    group_leader() (thanks @djnym)
  - Add ability to pass custom formatter function when tracing (thanks @iilyak)

## 2.2.1
  - Fixing type specs for `recon:port_types/0` and `recon_lib:count/1`,
    thanks to @lucafavatella
  - Minor documentation fixes.

## 2.2.0
  - Adding scheduler info metrics to get a more accurate picture than what
    top and CPU gives.
  - Broadening `recon_trace:calls/2` interface to allow multiple match specs,
    which was currently only allowed for `calls/3`.
  - Support for `mbcs_pool` data in `erts_alloc`, and some internal refactoring,
    thanks to Lukas Larsson.

## 2.1.2
  - Fixing tests for R15B02 and up
  - Fixing a backwards compatibility for R15B03 on `recon_alloc` operations
    with dumps on disk

## 2.1.1
  - Renaming `recon_trace:mfa()` type to `recon_trace:tspec()` to avoid
    issues in older Erlang versions regarding redefining an existing type
    (Thanks Roberto Aloi)

## 2.1.0
  - Adding `recon_trace` script to allow safe tracing of function calls
    on production nodes.
  - Adding `queue_fun.awk` script to inspect running functions of processes
    with large mailboxes in a crash dump.

## 2.0.2
  - Preventing crashes in `recon_alloc` when certain expected allocators
    do not return results (Thanks to Michal Ptaszek)

## 2.0.1
  - Add support for R16B03 in `recon_alloc`.

## 2.0.0
  - Test suite added
  - Major rewrite of `recon_alloc`, thanks to Lukas Larsson. Things that changed include:
    - `average_sizes/0` is renamed `average_block_sizes/1` and now takes
      the keywords `current` and `max`.
    - Documentation updates.
    - `memory/1` has new options in `allocated_types` and `allocated_instances`.
    - `memory/2` has been added, which allows to choose between `current` and
      `max` values. `memory(Term)` is made equivalent to `memory(Term, current)`.
    - Allow `sbcs_to_mbcs/0` to take the arguments `current` and `max`.
    - Added unit conversion function `set_unit/1`, which allows to get the
      `recon_alloc` results in bytes (default), kilobytes, megabytes, and
      gigabytes, to help with readability.
  - Updated the internal rebar version, if anybody were to use it.
  - `recon:port_info/1` no longer includes the `parallelism` option by default
    within the `meta` category as this would hurt backwards compatibility on
    some installations.
  - `recon:get_state/2` is added in order to specify timeouts.
    `recon:get_state/1` keeps its 5000 milliseconds timeout.
  - Addition of a fake attribute called `binary_memory`, which is callable in
    `recon:info/2,4`, `recon:proc_count/2`, and `recon:proc_window/3`. This
    attribute allows to fetch the amount of memory used by refc binaries for
    a process, and to sort by that value for counts and windows.

## 1.2.0
  - add `recon_alloc:snapshot*` functions, which allow memory allocation
    snapshots to be taken, saved on disk, reloaded, and analyzed on-demand.
    Thanks to Lukas Larsson for this functionality.
  - remove `parallelism` data from `port_info` for better OTP backwards
    compatibility with little loss of information.

## 1.1.0
  - add `recon_lib:term_to_port` to convert a string back to a
    usable port.
  - add `recon:port_info/1` and `recon:port_info/2`
  - add `recon_alloc` module

## 1.0.0
  add `info/2` and `info/4`. The `memory` info type thus gets renamed
  to `memory_used`, in order to avoid conflicts when picking between a type
  and a specific process attribute. Types exported by the module also get
  updated.

## 0.4.2
- extended `app_deps.erl` to read apps/ directories for releases

## 0.4.1
- fixed bug where nodes with lots of processes could see the GC call
  fail if said processes failed between long calls within the `bin_leak`
  function call.

## 0.4.0
- fixed bug where nodes with lots of processes or ports could see their
  count or window functions fail because a process or socket closed between the
  time the function started and before it finished. This ends up changing the
  API in `recon_lib` for the window and count functions that take a specific
  pid as an argument.

## 0.3.1
- factored out some logic from `recon:info/1` into `recon_lib:term_to_pid`
  and allowed arbitrary terms to be used for pids in `recon:get_state/1`.
