Changeset 8279aab in mainline for uspace/lib/display/src/display.c


Ignore:
Timestamp:
2025-01-07T12:26:56Z (6 weeks ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
4e1221c
Parents:
12dd36c
git-author:
Jiri Svoboda <jiri@…> (2025-01-06 19:26:42)
git-committer:
Jiri Svoboda <jiri@…> (2025-01-07 12:26:56)
Message:

ui_lock() needs to lock display

If ui_lock() is used to lock UI while destroying a window in a separate
fibril, we need to make sure we cannot get display events for
that destroyed window.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/display/src/display.c

    r12dd36c r8279aab  
    11/*
    2  * Copyright (c) 2023 Jiri Svoboda
     2 * Copyright (c) 2025 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    138138}
    139139
     140/*
     141 * Lock display.
     142 *
     143 * While display is locked, display event handlers will not be called.
     144 *
     145 * @param display Display
     146 */
     147void display_lock(display_t *display)
     148{
     149        fibril_mutex_lock(&display->lock);
     150}
     151
     152/*
     153 * Unlock display.
     154 *
     155 * @param display Display
     156 */
     157void display_unlock(display_t *display)
     158{
     159        fibril_mutex_unlock(&display->lock);
     160}
     161
    140162/** Initialize window parameters structure.
    141163 *
     
    700722        display_wnd_ev_t event;
    701723
     724        display_lock(display);
     725
    702726        while (true) {
    703                 fibril_mutex_lock(&display->lock);
    704 
    705727                if (display->sess != NULL)
    706728                        rc = display_get_event(display, &window, &event);
    707729                else
    708730                        rc = ENOENT;
    709 
    710                 fibril_mutex_unlock(&display->lock);
    711731
    712732                if (rc != EOK)
     
    752772        }
    753773
     774        display_unlock(display);
    754775        async_answer_0(icall, EOK);
    755776}
Note: See TracChangeset for help on using the changeset viewer.