Changeset 5f5d375 in mainline for uspace/srv/hid/remcons/user.c


Ignore:
Timestamp:
2024-10-08T15:12:03Z (8 months ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
5e0acaa
Parents:
c7ecd290
git-author:
Jiri Svoboda <jiri@…> (2024-10-07 18:11:43)
git-committer:
Jiri Svoboda <jiri@…> (2024-10-08 15:12:03)
Message:

Split read/write lock in remcons

We do not want waiting for event to block output.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hid/remcons/user.c

    rc7ecd290 r5f5d375  
    9797
    9898        fibril_condvar_initialize(&user->refcount_cv);
    99         fibril_mutex_initialize(&user->guard);
     99        fibril_mutex_initialize(&user->send_lock);
     100        fibril_mutex_initialize(&user->recv_lock);
    100101        user->task_finished = false;
    101102        user->socket_closed = false;
     
    151152
    152153        telnet_user_t *tmp = user;
    153         fibril_mutex_lock(&tmp->guard);
     154        fibril_mutex_lock(&tmp->recv_lock);
    154155        user->locsrv_connection_count++;
    155156
     
    163164        }
    164165
    165         fibril_mutex_unlock(&tmp->guard);
     166        fibril_mutex_unlock(&tmp->recv_lock);
    166167
    167168        fibril_mutex_unlock(&users_guard);
     
    176177void telnet_user_notify_client_disconnected(telnet_user_t *user)
    177178{
    178         fibril_mutex_lock(&user->guard);
     179        fibril_mutex_lock(&user->recv_lock);
    179180        assert(user->locsrv_connection_count > 0);
    180181        user->locsrv_connection_count--;
    181182        fibril_condvar_signal(&user->refcount_cv);
    182         fibril_mutex_unlock(&user->guard);
     183        fibril_mutex_unlock(&user->recv_lock);
    183184}
    184185
     
    189190bool telnet_user_is_zombie(telnet_user_t *user)
    190191{
    191         fibril_mutex_lock(&user->guard);
     192        fibril_mutex_lock(&user->recv_lock);
    192193        bool zombie = user->socket_closed || user->task_finished;
    193         fibril_mutex_unlock(&user->guard);
     194        fibril_mutex_unlock(&user->recv_lock);
    194195
    195196        return zombie;
     
    401402{
    402403        uint8_t *bp = (uint8_t *)buf;
    403         fibril_mutex_lock(&user->guard);
     404        fibril_mutex_lock(&user->recv_lock);
    404405
    405406        assert(size > 0);
     
    417418                            &next_byte);
    418419                        if (rc != EOK) {
    419                                 fibril_mutex_unlock(&user->guard);
     420                                fibril_mutex_unlock(&user->recv_lock);
    420421                                return rc;
    421422                        }
     
    453454        } while (size > 0 && (telnet_user_byte_avail(user) || *nread == 0));
    454455
    455         fibril_mutex_unlock(&user->guard);
     456        fibril_mutex_unlock(&user->recv_lock);
    456457        return EOK;
    457458}
     
    534535    size_t size)
    535536{
    536         fibril_mutex_lock(&user->guard);
     537        fibril_mutex_lock(&user->send_lock);
    537538
    538539        errno_t rc = telnet_user_send_data_locked(user, data, size);
    539540
    540         fibril_mutex_unlock(&user->guard);
     541        fibril_mutex_unlock(&user->send_lock);
    541542
    542543        return rc;
     
    552553    size_t size)
    553554{
    554         fibril_mutex_lock(&user->guard);
     555        fibril_mutex_lock(&user->send_lock);
    555556
    556557        errno_t rc = telnet_user_send_raw_locked(user, data, size);
    557558
    558         fibril_mutex_unlock(&user->guard);
     559        fibril_mutex_unlock(&user->send_lock);
    559560
    560561        return rc;
     
    577578        errno_t rc;
    578579
    579         fibril_mutex_lock(&user->guard);
     580        fibril_mutex_lock(&user->send_lock);
    580581        rc = telnet_user_flush_locked(user);
    581         fibril_mutex_unlock(&user->guard);
     582        fibril_mutex_unlock(&user->send_lock);
    582583        return rc;
    583584}
     
    592593void telnet_user_update_cursor_x(telnet_user_t *user, int new_x)
    593594{
    594         fibril_mutex_lock(&user->guard);
     595        fibril_mutex_lock(&user->send_lock);
    595596        if (user->cursor_x - 1 == new_x) {
    596597                char data = '\b';
     
    599600        }
    600601        user->cursor_x = new_x;
    601         fibril_mutex_unlock(&user->guard);
     602        fibril_mutex_unlock(&user->send_lock);
    602603
    603604}
Note: See TracChangeset for help on using the changeset viewer.