38,7 → 38,7 |
#include <errno.h> |
#include <malloc.h> |
#include <mem.h> |
#include <rwlock.h> |
#include <fibril_sync.h> |
//#include <stdio.h> |
#include <unistd.h> |
|
90,7 → 90,7 |
static struct{ |
/** Safety lock. |
*/ |
rwlock_t lock; |
fibril_rwlock_t lock; |
/** Packet map. |
*/ |
gpm_t packet_map; |
106,10 → 106,10 |
int pm_init( void ){ |
ERROR_DECLARE; |
|
rwlock_initialize( & pm_globals.lock ); |
rwlock_write_lock( & pm_globals.lock ); |
fibril_rwlock_initialize( & pm_globals.lock ); |
fibril_rwlock_write_lock( & pm_globals.lock ); |
ERROR_PROPAGATE( gpm_initialize( & pm_globals.packet_map )); |
rwlock_write_unlock( & pm_globals.lock ); |
fibril_rwlock_write_unlock( & pm_globals.lock ); |
return EOK; |
} |
|
118,18 → 118,18 |
packet_t packet; |
|
if( ! packet_id ) return NULL; |
rwlock_read_lock( & pm_globals.lock ); |
fibril_rwlock_read_lock( & pm_globals.lock ); |
if( packet_id > PACKET_MAP_SIZE * gpm_count( & pm_globals.packet_map )){ |
rwlock_read_unlock( & pm_globals.lock ); |
fibril_rwlock_read_unlock( & pm_globals.lock ); |
return NULL; |
} |
map = gpm_get_index( & pm_globals.packet_map, PACKET_MAP_PAGE( packet_id )); |
if( ! map ){ |
rwlock_read_unlock( & pm_globals.lock ); |
fibril_rwlock_read_unlock( & pm_globals.lock ); |
return NULL; |
} |
packet = ( * map )[ PACKET_MAP_INDEX( packet_id ) ]; |
rwlock_read_unlock( & pm_globals.lock ); |
fibril_rwlock_read_unlock( & pm_globals.lock ); |
return packet; |
} |
|
139,7 → 139,7 |
packet_map_ref map; |
|
if( ! packet_is_valid( packet )) return EINVAL; |
rwlock_write_lock( & pm_globals.lock ); |
fibril_rwlock_write_lock( & pm_globals.lock ); |
if( PACKET_MAP_PAGE( packet->packet_id ) < gpm_count( & pm_globals.packet_map )){ |
map = gpm_get_index( & pm_globals.packet_map, PACKET_MAP_PAGE( packet->packet_id )); |
}else{ |
146,12 → 146,12 |
do{ |
map = ( packet_map_ref ) malloc( sizeof( packet_map_t )); |
if( ! map ){ |
rwlock_write_unlock( & pm_globals.lock ); |
fibril_rwlock_write_unlock( & pm_globals.lock ); |
return ENOMEM; |
} |
bzero( map, sizeof( packet_map_t )); |
if(( ERROR_CODE = gpm_add( & pm_globals.packet_map, map )) < 0 ){ |
rwlock_write_unlock( & pm_globals.lock ); |
fibril_rwlock_write_unlock( & pm_globals.lock ); |
free( map ); |
return ERROR_CODE; |
} |
158,7 → 158,7 |
}while( PACKET_MAP_PAGE( packet->packet_id ) >= gpm_count( & pm_globals.packet_map )); |
} |
( * map )[ PACKET_MAP_INDEX( packet->packet_id ) ] = packet; |
rwlock_write_unlock( & pm_globals.lock ); |
fibril_rwlock_write_unlock( & pm_globals.lock ); |
return EOK; |
} |
|
168,7 → 168,7 |
packet_map_ref map; |
packet_t packet; |
|
rwlock_write_lock( & pm_globals.lock ); |
fibril_rwlock_write_lock( & pm_globals.lock ); |
count = gpm_count( & pm_globals.packet_map ); |
while( count > 0 ){ |
map = gpm_get_index( & pm_globals.packet_map, count - 1 ); |