Changeset 8279aab in mainline for uspace/lib/ui/src/window.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/ui/src/window.c

    r12dd36c r8279aab  
    11/*
    2  * Copyright (c) 2024 Jiri Svoboda
     2 * Copyright (c) 2025 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    978978        ui_t *ui = window->ui;
    979979
    980         ui_lock(ui);
     980        fibril_mutex_lock(&ui->lock);
    981981        ui_window_send_close(window);
    982         ui_unlock(ui);
     982        fibril_mutex_unlock(&ui->lock);
    983983}
    984984
     
    989989        ui_t *ui = window->ui;
    990990
    991         ui_lock(ui);
     991        fibril_mutex_lock(&ui->lock);
    992992        (void)nfocus;
    993993
     
    998998
    999999        ui_window_send_focus(window, nfocus);
    1000         ui_unlock(ui);
     1000        fibril_mutex_unlock(&ui->lock);
    10011001}
    10021002
     
    10071007        ui_t *ui = window->ui;
    10081008
    1009         ui_lock(ui);
     1009        fibril_mutex_lock(&ui->lock);
    10101010        ui_window_send_kbd(window, kbd_event);
    1011         ui_unlock(ui);
     1011        fibril_mutex_unlock(&ui->lock);
    10121012}
    10131013
     
    10231023                return;
    10241024
    1025         ui_lock(ui);
     1025        fibril_mutex_lock(&ui->lock);
    10261026
    10271027        claim = ui_wdecor_pos_event(window->wdecor, event);
    10281028        if (claim == ui_claimed) {
    1029                 ui_unlock(ui);
     1029                fibril_mutex_unlock(&ui->lock);
    10301030                return;
    10311031        }
    10321032
    10331033        ui_window_send_pos(window, event);
    1034         ui_unlock(ui);
     1034        fibril_mutex_unlock(&ui->lock);
    10351035}
    10361036
     
    10481048                return;
    10491049
    1050         ui_lock(ui);
     1050        fibril_mutex_lock(&ui->lock);
    10511051        (void) ui_window_resize(window, rect);
    10521052        ui_window_send_resize(window);
    1053         ui_unlock(ui);
     1053        fibril_mutex_unlock(&ui->lock);
    10541054}
    10551055
     
    10601060        ui_t *ui = window->ui;
    10611061
    1062         ui_lock(ui);
     1062        fibril_mutex_lock(&ui->lock);
    10631063
    10641064        if (window->wdecor != NULL && nfocus == 0) {
     
    10681068
    10691069        ui_window_send_unfocus(window, nfocus);
    1070         ui_unlock(ui);
     1070        fibril_mutex_unlock(&ui->lock);
    10711071}
    10721072
Note: See TracChangeset for help on using the changeset viewer.