From: Michel Dänzer <michel.daen...@amd.com>

If a reference count is <= 0, call FatalError with the call location
(in case it doesn't get resolved in the backtrace printed by
FatalError).

Signed-off-by: Michel Dänzer <michel.daen...@amd.com>
---
 src/drmmode_display.h | 28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/src/drmmode_display.h b/src/drmmode_display.h
index b64a938cd..f351bb09c 100644
--- a/src/drmmode_display.h
+++ b/src/drmmode_display.h
@@ -133,32 +133,36 @@ enum drmmode_flip_sync {
 
 
 static inline void
-drmmode_fb_reference(int drm_fd, struct drmmode_fb **old, struct drmmode_fb 
*new)
+drmmode_fb_reference_loc(int drm_fd, struct drmmode_fb **old, struct 
drmmode_fb *new,
+                        const char *caller, unsigned line)
 {
        if (new) {
                if (new->refcnt <= 0) {
-                       ErrorF("New FB's refcnt was %d in %s\n", new->refcnt,
-                              __func__);
-               } else {
-                       new->refcnt++;
+                       FatalError("New FB's refcnt was %d at %s:%u",
+                                  new->refcnt, caller, line);
                }
+
+               new->refcnt++;
        }
 
        if (*old) {
                if ((*old)->refcnt <= 0) {
-                       ErrorF("Old FB's refcnt was %d in %s\n",
-                              (*old)->refcnt, __func__);
-               } else {
-                       if (--(*old)->refcnt == 0) {
-                               drmModeRmFB(drm_fd, (*old)->handle);
-                               free(*old);
-                       }
+                       FatalError("Old FB's refcnt was %d at %s:%u",
+                                  (*old)->refcnt, caller, line);
+               }
+
+               if (--(*old)->refcnt == 0) {
+                       drmModeRmFB(drm_fd, (*old)->handle);
+                       free(*old);
                }
        }
 
        *old = new;
 }
 
+#define drmmode_fb_reference(fd, old, new) \
+       drmmode_fb_reference_loc(fd, old, new, __func__, __LINE__)
+
 
 extern int drmmode_page_flip_target_absolute(AMDGPUEntPtr pAMDGPUEnt,
                                             drmmode_crtc_private_ptr 
drmmode_crtc,
-- 
2.11.0

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to