Changeset 5f5d375 in mainline for uspace/srv/hid/remcons/remcons.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/remcons.c

    rc7ecd290 r5f5d375  
    540540                    "failed: %s.", APP_GETTERM, user->service_name, APP_SHELL,
    541541                    str_error(rc));
    542                 fibril_mutex_lock(&user->guard);
     542                fibril_mutex_lock(&user->recv_lock);
    543543                user->task_finished = true;
    544544                user->srvs.aborted = true;
    545545                fibril_condvar_signal(&user->refcount_cv);
    546                 fibril_mutex_unlock(&user->guard);
     546                fibril_mutex_unlock(&user->recv_lock);
    547547                return EOK;
    548548        }
    549549
    550         fibril_mutex_lock(&user->guard);
     550        fibril_mutex_lock(&user->recv_lock);
    551551        user->task_id = task;
    552         fibril_mutex_unlock(&user->guard);
     552        fibril_mutex_unlock(&user->recv_lock);
    553553
    554554        task_exit_t task_exit;
     
    560560
    561561        /* Announce destruction. */
    562         fibril_mutex_lock(&user->guard);
     562        fibril_mutex_lock(&user->recv_lock);
    563563        user->task_finished = true;
    564564        user->srvs.aborted = true;
    565565        fibril_condvar_signal(&user->refcount_cv);
    566         fibril_mutex_unlock(&user->guard);
     566        fibril_mutex_unlock(&user->recv_lock);
    567567
    568568        return EOK;
     
    728728
    729729        /* Wait for all clients to exit. */
    730         fibril_mutex_lock(&user->guard);
     730        fibril_mutex_lock(&user->recv_lock);
    731731        while (!user_can_be_destroyed_no_lock(user)) {
    732732                if (user->task_finished) {
     
    740740                        }
    741741                }
    742                 fibril_condvar_wait_timeout(&user->refcount_cv, &user->guard, 1000);
    743         }
    744         fibril_mutex_unlock(&user->guard);
     742                fibril_condvar_wait_timeout(&user->refcount_cv, &user->recv_lock, 1000);
     743        }
     744        fibril_mutex_unlock(&user->recv_lock);
    745745
    746746        rc = loc_service_unregister(remcons_srv, user->service_id);
Note: See TracChangeset for help on using the changeset viewer.