  * fixed build

0.6.0-alpha.2.1
===============

  * session tracker required (consolekit for now); if not available, ulatencyd
    is aborted with descriptive error
  * fixed SIGSEGV and critical GLib warning if none session tracker successfully
    registered
  * fixed handling of focused processes

0.6.0-alpha.2
=============

  * building (CMAKE stuff):
    - set initial flags for each BUILD_TYPE (Debug, Release, MinSizeRel,
      RelWithDebInfo)
    - use GCC link time optimization (LTO) by default
    - use BUILD_TYPE "Release" as default
  * add ulatencyd --version option, which prints ulatencyd version,
    used build configuration and flags, and some definitions like
    install directories, rule directories etc.

  * implemented USession subsystem: tracks real user sessions; has
    interface for session tracking agents (modules); different agents
    may register, but only one may be active
    - consolekit agent for USession
    - LUA and DBUS bindings
    Documented in doxygen USession module.

  * implemented UFocus subsystem which replaces active lists (and other
    stuff from groups.c) - works on real user sessions, different focus
    tracker may be active for each user session
    - xwatch module updated to work on real sessions (USession) and
    adapted to be focus tracker (UFocus)
    - LUA and DBUS bindings

  * ulatency client
    - updated to above changes

  * initial hooks implementation, code may currently trigger/listen to
    following events (no LUA binding yet):
    - session added / removed / active hint changed / idle hint changed
    - focus tracker changed / unset tracker request triggered
    - process major property changed
    - process exits
    - all modules loaded
    - measures time elapsed in hooks; logged with verbosity level
      G_LOG_LEVEL_DEBUG
    Documented in doxygen UHook module.

  * mappings
    - consider process w/ user.idle label being active only if focused,
    this allows attach user.idle labels to processes which creates X
    window (high priority if focused, otherwise user.idle)
    - attached user.idle labels to Dropbox, Ubuntu-One, Deja-dup
    - attached user.media label to MPV
    [thanks Feminist-Software-Foundation]
    - distinguish kernel processes from dead and zombies

  * add more run-time tests and assertions, especially in DEVELOP_MODE
    - Briefly documented in doxygen UAssert module

    - fix and improve assertions while decrementing/incrementing
      reference counters
    - addes assert alternatives to DEC_REF(P)/INC_REF(P) macros:
      - INC_REF_FORBID_UNREF(P) - forbids reference count drop to 0 in
      future
      - DEC_REF_ALLOW_UNREF(P) - allows reference count drop to 0 in
      future
      - INC_REF_ASSERT_VAL(P, VAL)
      - INC_REF_ASSERT_NOT_VAL(P, VAL)

  * improved parsing of /proc/<pid>/ files
    - g_file_get_contents() no more used because it is not suitable for
    reading files from procfs
    - implemented u_pid_read_file() which is more suitable: it uses
    unbuffered read(), allocates less memory, uses standard errno
    reporting (including important ESRCH which GLib does not define),
    makes it easier to detect whether file is empty or contains a null
    byte (precisely: makes it easier detectable by callers without need
    to propagate number of read bytes), and should be faster
    - this also allows to detect whether a process vanished or is a
    zombie or whether other - unexpected - error occurred
    - most other function reading from procfs were updated to use
      u_pid_read_file()
    - u_read_0file() renamed to u_pid_read_0file(); for consistant
    naming

  * u_proc_ensure() reworked
    - internally splits to separate function to update each of sets
        of properties, which
      - use u_pid_read_file()
      - handles read errors more strictly; any unexpected error triggers
        critical warning to ensure ulatencyd assumptions of processes
    states and behaviour are/will be correct (this also helps debugging
    for different Linux kernel versions)
    - u_proc properties preserves their values once successfully parsed,
    until the u_proc instance is freed
    - more precise way to specify on what condition properties should
    be updated (each time; once per iteration; only once in an u_proc
    life; never)
    - allows to invalidate properties and force re-parsing on next call
    to u_proc_ensure() (used on netlink EXEC events)
    - avoids useless parsing of EXE, CMDLINE, ENVIRON if process is
    zombie or kernel thread
    - u_proc_ensure() returns success (TRUE) if required properties are
    set (were parsed successfully at least once)
    - fixed ensuring of task property
    - U_PROC_HAS_STATE() macro made more robust
    - more precise detection of vanished processes / kernel processes
    and newly - zombies
    - avoids handling more them aggressive, if it's useless
    - this changes also fixes warnings triggered when ulatencyd tried to
    handle kernel / zombie processes as user-space alive processes and
    allows more strictly handling of other errors
    - new process states UPROC_KERNEL, UPROC_VANISHED, UPROC_ZOMBIE
    - removed states UPROC_NEW, UPROC_ALIVE, UPROC_DEAD
    - new UPROC_MASK_DEAD - mask to test if a process vanished or is a
    zombie

  * Added U_PROC_FORMAT and U_PROC_FORMAT_ARGS(P) macros which make easy
    adding u_proc instance description to printf(), e.g. to log
    messages

  * scheduler: avoids scheduling of dead (including zombie processes)

  * proc_by_pid_with_retry() - returns an #u_proc instance each time it
    is possible (parses a pid if not yet known; determines if given pid
    is a process or a task (thread), in the later case parse and
    returns its thread leader
  * really avoid tasks (threads) pollute the process tree
  * make sure no tasks (threads) go unnoticed through
    update_processes_run()
  * netlink:
    - fixed handling of fork events: forks were unintentionally ignored
      in 0.6.0-alpha.1 and their parents (forking processes) were not
      reliable determined since linux_netlink support was implemented
    - minor improvement to netlink_fallback

  * dbus.c: updated + ensures correctness of PID arguments passed by
    dbus
  * fixed a small memory leak in consolekit module


0.6.0-alpha.1
=============

  * removed embedded libproc, coreutils, lbc; but needs to be statically linked
    against external (system) libproc (issue #37)

  * CGROUPS handling changes
    - ulatencyd does not touch foreign cgroups
    - scheduler skips processes in groups created outside ulatencyd
    - stores own cgroups in private cgroup hierarchies
    - unused cgroups may manually removed via DBUS call
      - org.quamquam.ulatencyd.System.cgroupsCleanup method
      - new cgroups release agent script (passes request to scheduler via dbus)
    - cleans cgroups on exit (scheduler switches to 99-cleanup.lua mappings)
    - removes cgroups left behind the previous ulatencyd instance
    - reimplemented u_proc.cgroup* stuff in the C core
      + U_PROC:get_cgroup(subsys)
      + U_PROC:set_cgroup(subsys, cgroup_path)
      + U_PROC.cgroup => u_proc.cgroup (GHashTable)
      + U_PROC.cgroup_raw => u_proc.cgroup_raw (char **)
      + U_PROC.cgroup_origin => u_proc.cgroup_origin (GHashTable)
      + U_PROC.cgroup_origin_raw => u_proc.cgroup_origin (char **)
      + u_proc_ensure(proc, CGROUP, ...)

  * support for process isolation (Isolate filter, via isolate flag)
      see simple.d/isolate.conf, rules/zz_isolate.lua

  * added flexibility to scheduler mappings
    - sysflags prefilter
    - mulitple checks functions
    - rule may be skipped till end of current scheduler run
    - multiple adjusts function
    - adjust functions to be run only once per scheduler run
    - ulatency.match_flag()
    - scheduler:register_after_hook(): registers function to be run after the 
      scheduling of processes is finished.
    - string:rtrim()
    - fix CGroup:get_value()
    - ulatency.is_pid_alive(pid): tests if /proc/pid/ exists

  * reimplemented tasks (now stored in a hash table, persistent across
    iterations and usable/extensible in LUA, reference counting)
      + U_TASK.is_valid
      + U_TASK.is_invalid
      + U_TASK.data
      + U_TASK.tid
      + U_TASK.proc_pid
      (if U_TASK.is_valid:)
      + U_TASK.proc
      + all proc_t fields (ppid,tgid,euid, etc.)
    - ulatency.get_tid(tid) from LUA
    - ulatency.get_pid(pid,include_tasks) if `include_tasks` and pid is a
      thread, returns its thread leader.

  * sessions
    + disable xwatch polling and clear the active pids lists of users with no
    active session
    + on session change run full iteration and make sure it is run before next
    xwatch poll

  * ulatency client:
    - fixed sysflags command
    - ulatency clear <cgroup>|ALL
      + tries to thaw frozen groups
      + does not clear cgroups not created by ulatencyd
      + clears ulatencyd private hierarchies
      + keeps ulatencyd private hierarchy synced with cgroup hierarchy that
        subsystem controller
    - ulatency mounts: added column with ulatencyd private hierarchies
    - new command "clear-empty": clears all empty cgroups created by ulatencyd;
    - ulatency --cmd: fixed if /proc/#/cmdline contains UTF-8 chars

  * configuration changes for ulatencyd.conf:
    - raised default io.threshold from 500 to 3000, 500 was IMHO too low

 * configuration changes in cgroups.conf:
    - added memory.move_charge_at_immigrate'] = 1 to memory subsys defaults.
    - remove support for complex cgroups hierarchies and mount points,
      supports only the most usual scenario with each cgroup subsystem mounted
      in separate hierarchy (unde CGROUP_ROOT/<subsystem>).
      CGROUP_MOUNTPOINTS option was replaced with CGROUP_SUBSYSTEMS - simple
      array of enabled subsystems.

  * split src/core.lua to modules inside src/lua/
  * U_PROC extensible in LUA
  * modules are loaded vie gmodule (from GLib)
  * netlink_fallback module; used if kernel is not compiled with PROC_EVENTS
  * delay queue related fixes and optimizations
  * u_proc_ensure() optimizations
  * improved signal handling (quit, suspend)
  * fixed linux signal handling to be async safe
  * logging enhancements
  * system "startup" flag set until first iteration finished
  * commit a new cgroup setting prior any process is added
  * sample logrotate file (scripts/logrotate)
  * sample sysv-rc init file (scripts/service/sysv-rc/); probably containins
    Debian specific code.
  * sched_autogroup in linux kernel is restored on shutdown
  * umask is set to 022 instead of 0
  * doesn't die when cgroup subsystem cannot be mounted, just print warning
  * fixed a lot of memory leaks
  * cgroups removed outside ulatencyd now correctly handled (issue #28)
  * detects valid range of values of cgroup parameters (issue #36)
  * if process is blocked from scheduling, print the reason
  * fix SMP: Attach isolated cpuset cgroups to all online CPUs
  * fixed merge_config pre rules handling (scheduler/00-common)
  * fixed io priority for user.media (to real-time)
  * fixes in default scheduler (20-desktop.lua)
  * fix the out of source directory build
  * io.rule turns NCQ (IOPS) mode on block devices under load
  * limits user.* labels to users and {daemon,system}.* to system processes
  * added daemon.media label (for mpd)
  * doxygen documentation (not finished)
  * a lot updated simple rules
  * new __experimental__ scheduler mappings "one_seat_desktop"
  * other bug fixes not mentioned here

0.5.0 / 2011-04-05 
==================

  * bump version
  * fix single task config
  * hide videoplayback for now
  * test if subsystem is loaded
  * Merge branch 'master' into develop
  * fix missing labels on game and single_task config
  * add video_playback config
  * cache available cgroup names
  * add xfce & lxde configs
  * list configs with no info object as well
  * better error reporting and handling
  * better error messages on connecting errors
  * retry process lookup in remote api calls
  * install all man pages
  * fix typo schduler -> scheduler in ulatency
  * add manpage for run-single-task
  * add manpage for run-game
  * add ulatency-gui to ulatency.1 manpage
  * fix goption warning for G_OPTION_FLAG_NO_ARG

0.5.0-rc3 / 2011-03-24 
==================

  * fix client install rules

0.5.0-rc2 / 2011-03-24 
==================

  * also run instant filters on processes
  * do mixture of read/write on mem pages
  * don't put active processes into rt io
  * implement stress mode in memleak
  * implement io prio settings for processes
  * add banshee player
  * Merge commit 'dbdcb918d051d71c913e63ed6bea605088b457ed'
  * more robust version of terminal size detection
  * fix io bottleneck detector
  * catch errors caused in terminal detection
  * Merge commit 'f6715991672ccc8c7fd239b8139aae74dac3a3f5'
  * work without python-dbus-qt4
  * add set config menu in window

0.5.0-rc1 / 2011-03-23 
==================

  * Merge commit 'd8b2bd5c248c06b39c7d7da56a3961cad1d36cc9'
  * update readme to reflect recent depencies
  * let gui survive daemon restart
  * update gui to use policykit
  * install doc files, bump version
  * Merge commit '4d65ec602b0673876732fe100506f68fbc8e08b0'
  * updates to documentation
  * optimize doxygen for project
  * Updated Start Hacking (markdown)
  * don't start ulatencyd more then once
  * optional build docs
  * Merge commit 'bd23966e9e27132cedceb775d01c8fe91e5bb9f3'
  * add make docs target
  * Updated Home (markdown)
  * rename file
  * Merge commit '76d54cf31eacbb060bcad7f5d41b8e6d78976bb0'
  * start changing documentation
  * add api doc generation trough doxygen
  * add manpages. thanks Alessandro
  * add script for update external repositories
  * Add 'docs/wiki/' from commit '978fb5626ac4f2c61c6704dba636c7562b3ce09e'
  * add script to run ulatencyd under alleyoop
  * Merge commit '0a9ff7e9373c6d7a9f202f1ebd2252291e65e86a'
  * adjust cmake rules
  * implement policykit support
  * better run command code
  * use glob matching in simplerules
  * cleanup exe readlink
  * add recrusive flags api to dbus interface
  * add rules for boinc client
  * use full path on exe matches, not substring
  * adjust dbus interface to recrusive list flags changes
  * add u_proc_list_flags function, inherit changes
  * ensure notifiy release agent is set
  * add extra executable for gui/close window change
  * print help config on run command
  * add support for execute process in switches scheduler config
  * use u_task struct for task storage
  * add /usr/local/games to game path
  * add single_task & game config
  * bug fix: check data if none
  * bug fix:function prnt doesnt worked under python3
  * move scheduler configs into own path
  * implement hard limits on memory usage
  * reduce io prio on poison targets
  * bump version
  * fix install rules
  * Updated 1   FAQ (rest)
  * Updated Home (markdown)
  * Updated Flag system (markdown)
  * Updated Flag system (markdown)
  * Updated Flag system (markdown)
  * Updated Home (markdown)
  * Created flags.md (markdown)
  * Updated Home (markdown)
  * Updated 1   FAQ (rest)
  * Write a small message here explaining this change. (Optional)
  * Updated Writing Rules (markdown)
  * Updated Adjusting default scheduler (markdown)
  * Updated 1   FAQ (rest)
  * Updated How does it work (markdown)
  * Updated How does it work (markdown)
  * Updated 1   FAQ (rest)
  * Updated 1   FAQ (rest)
  * Updated Start Hacking (markdown)
  * Created Start-hacking (markdown)
  * Updated Home (markdown)
  * Updated 1   FAQ (rest)
  * Updated Home (markdown)
  * Updated Home (markdown)
  * Updated Home (markdown)
  * Updated Home (markdown)
  * Updated Home (markdown)
  * Updated Home (markdown)
  * Updated Home (markdown)
  * Created Adjusting default scheduler (markdown)
  * Updated Home (markdown)
  * Updated Home (markdown)
  * started writing rules howto
  * Created How does it work (markdown)
  * Updated Home (markdown)
  * Updated 1   FAQ (rest)
  * Updated 1   FAQ (rest)
  * Updated 1   FAQ (rest)
  * Updated 1   FAQ (rest)
  * Write a small message here explaining this change. (Optional)
  * Updated 1   FAQ (rest)
  * Updated Home (markdown)
  * Updated Home (markdown)
  * Updated Home (markdown)
  * Updated 1   Does ulatencyd support my cgroups mount points (rest)
  * Created Faq (rest)
  * Updated Home (markdown)
  * start dbus specs
  * Updated Home (markdown)
  * Updated Home (markdown)
  * Created Ideas to test (markdown)
  * Created Architecture (markdown)
  * add arch image
  * Initial Commit
