Shared Library Changes for Upcoming Release 2.2.1 (Preliminary)

Shared library libddcutil is backwardly compatible with the one in ddcutil 2.2.0. The SONAME is unchanged as libddcutil.so.5. The released library file is libddcutil.so.5.3.0.

For the most part, shared library related changes reflect bugs uncovered by, and enhancements for, KDE PowerDevil's use of libddcutil.

Fixed

  • Functions ddca_find_display_ref() and ddca_get_display_ref() were returning a pointer to the internal Display_Ref struct rather than an external integer DDCA_Display_Ref, causing segfault or return code DDCRC_INVALID_DISPLAY when used on a subsequent api call such as ddca_open_display2(). Addresses issue #528.
  • ddca_redetect_displays(): block if called with callback threads active or if already executing
  • ddca_close_display(): allow execution even if libddcutil is quiesced. Avoids a possible deadlock due to an internal display lock not having been released.
  • ddca_stop_watch_displays() did not release the X11/Wayland connection obtained by ddca_start_watch_displays(). This also occured with each ddca_redetect_displays() call. As a result KDE PowerDevil eventually exhausted X11 connections of a very long running system with repeated display connections and disconnections. Pull request #519.
  • KDE powerdevil was terminating with status success instead of failure if libddcutil terminated with a traced assertion, causing the powerdevil service to not restart automatically. Macro TRACE_ASSERT() is modified to use __assert_fail() instead of exit() for termination.
  • Maximum wait time on internal function lock_display() not respected, possible infinte loop. Addresses issue #511
  • Make test for missing DRM card-connector directories more robust. Handle the case where Nvidia driver 340 series only partially sets attributes in the directory. Addresses issue #507.
  • Certain API functions were not recognized as arguments to --trcfunc and --trcfrom. These included ddca_find_display_ref, ddca_get_display_ref, report_parsed_capabilities.
  • Callback function handling made more bulletproof
    • Close and unlock displays left open by user callback function
    • Write syslog messages (with log level NOTICE) before and after executing the callback function

API Changes

  • Struct DDCA_Display_Info2 is an extended version of DDCA_Display_Info that adds fields for the display's sysfs card-connector directory, how that directory was determined (precisely using I2C bus number or heuristically using EDID), and the DRM connector id. API functions have been added to use this struct: ddca_get_display_info2(), ddca_free_display_info2(), and ddca_report_display_info2(). Addresses issue #518.
Added Enums  
DDCA_Drm_Connector_Found_By  How association between display reference and sysfs
 DRM card-connector directory was made


Added Structs  Comments
DDCA_Display_Info2  Extends DDCA_Display_Info with additional fields drm_card_connector
 drm_card_connector_found_by, drm_connector_id


Added API Functions  Comments
ddca_get_display_info2  
ddca_free_display_info2  
ddca_report_display_info2