Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 988 → Rev 989

/shark/trunk/ports/first/first-contract.c
16,9 → 16,13
#include <kernel/descr.h>
#include <kernel/func.h>
#include <pistar.h>
#include <ll/i386/string.h>
 
#define MAX_SHARED_NAME 15
 
struct hash_entry {
mutex_t mx;
char shared_obj_name[MAX_SHARED_NAME];
FSF_SHARED_OBJ_HANDLE_T_OPAQUE id;
};
 
364,6 → 368,49
 
*/
 
 
int fsf_get_shared_object_handle
(fsf_shared_obj_id_t obj_id,
fsf_shared_obj_handle_t *obj_handle) {
int index;
int oldindex;
SYS_FLAGS f;
 
f=kern_fsave();
 
index=hash_fun(obj_id);
 
if (strcmp(htable[index].shared_obj_name,obj_id) == 0) {
kern_frestore(f);
return index;
}
 
if (htable[index].id!=0) {
oldindex=index;
index = (index + 1) % MAX_HASH_ENTRY;
// collision detection
while (htable[index].id !=0 && index!=oldindex) {
if (strcmp(htable[index].shared_obj_name,obj_id) == 0) {
kern_frestore(f);
return index;
}
index=(index+1) % MAX_HASH_ENTRY;
}
// table is full
if (index==oldindex) {
kern_frestore(f);
return -1;
}
}
 
kern_frestore(f);
return -1;
 
}
 
 
 
int fsf_init_shared_object
(fsf_shared_obj_id_t id,
fsf_shared_obj_handle_t *obj,
380,16 → 427,16
index=hash_fun(id);
//kern_printf("Index %d Hash %d", index, htable[index].id);
 
if (htable[index].id == index) {
if (strcmp(htable[index].shared_obj_name,id) == 0) {
kern_frestore(f);
return -1;
}
 
if (htable[index].id>=0) {
if (htable[index].id!=0) {
oldindex=index;
index = (index + 1) % MAX_HASH_ENTRY;
// collision detection
while (htable[index].id >=0 && index!=oldindex) index=(index+1) % MAX_HASH_ENTRY;
while (htable[index].id !=0 && index!=oldindex) index=(index+1) % MAX_HASH_ENTRY;
// table is full
if (index==oldindex) {
kern_frestore(f);
401,8 → 448,8
 
mutex_init(&(htable[index]).mx, &a);
mutex=&(htable[index]).mx;
htable[index].id=index;
*obj=*id;
strncpy(htable[index].shared_obj_name, id,MAX_SHARED_NAME);
*obj=index;
kern_frestore(f);
 
return 0;