Changeset ad123964 in mainline for kbd/generic/key_buffer.c


Ignore:
Timestamp:
2006-06-01T00:21:19Z (19 years ago)
Author:
Josef Cejka <malyzelenyhnus@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
cf28036
Parents:
c594489
Message:

Fixed some bugs.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kbd/generic/key_buffer.c

    rc594489 rad123964  
    2828
    2929#include <key_buffer.h>
     30#include <futex.h>
     31
     32atomic_t keybuffer_futex = FUTEX_INITIALIZER;
    3033
    3134/** Clear key buffer.
     
    3336void keybuffer_free(keybuffer_t *keybuffer)
    3437{
    35 
     38        futex_down(&keybuffer_futex);
     39        keybuffer->head = 0;
     40        keybuffer->tail = 0;
    3641        keybuffer->items = 0;
    37         keybuffer->head = keybuffer->tail = keybuffer->items = 0;
     42        futex_up(&keybuffer_futex);
    3843}
    3944
     
    7075void keybuffer_push(keybuffer_t *keybuffer, char key)
    7176{
     77        futex_down(&keybuffer_futex);
    7278        if (keybuffer->items < KEYBUFFER_SIZE) {
    73                 keybuffer->fifo[keybuffer->tail = (keybuffer->tail + 1) < keybuffer->items ? (keybuffer->tail + 1) : 0] = (key);
     79                keybuffer->fifo[keybuffer->tail] = key;
     80                keybuffer->tail = (keybuffer->tail + 1) % KEYBUFFER_SIZE;
    7481                keybuffer->items++;
    7582        }
     83        futex_up(&keybuffer_futex);
    7684}
    7785
     
    8290int keybuffer_pop(keybuffer_t *keybuffer, char *c)
    8391{
     92        futex_down(&keybuffer_futex);
    8493        if (keybuffer->items > 0) {
    8594                keybuffer->items--;
    86                 *c = keybuffer->fifo[keybuffer->head = (keybuffer->head + 1) < keybuffer->items ? (keybuffer->head + 1) : 0];
     95                *c = keybuffer->fifo[keybuffer->head];
     96                keybuffer->head = (keybuffer->head + 1) % KEYBUFFER_SIZE;
     97                futex_up(&keybuffer_futex);
    8798                return 1;
    8899        }
     100        futex_up(&keybuffer_futex);
    89101        return 0;
    90102}
Note: See TracChangeset for help on using the changeset viewer.