@@ -10,66 +10,55 @@ struct node *generate_node(unsigned short id, size_t size) {
1010 return NULL ;
1111 n -> id = id ;
1212 n -> size = size ;
13- n -> memory = malloc (size * sizeof (char ) + 1 );
13+ n -> memory = malloc ((1 + size ) * sizeof (char ));
14+ for (size_t i = 0 ; i < size ; i ++ ) {
15+ n -> memory [i ] = '#' ;
16+ }
17+ n -> memory [size ] = '\0' ;
1418 n -> isleader = 0 ;
1519 return n ;
1620}
1721
1822void write_on_node (struct node * n , size_t address , char * data , size_t size ) {
19- if (address < n -> size && address + size < n -> size ) {
20- n -> memory = (char * ) memcpy ((void * ) (n -> memory + address ), (void * ) data , size );
23+ if (address + size <= n -> size ) {
24+ void * mem_op_ptr = (n -> memory + address );
25+ memcpy ((void * ) mem_op_ptr , (void * ) data , size );
2126 debug ("Write done of :" , n -> id );
22- debug_n ((char * )n -> memory , n -> id , n -> size );
27+ debug_n ((char * ) n -> memory , n -> id , n -> size );
28+ }
29+ else {
30+ // printf("aske_addr %zu, ask_mem %zu, size_mem %zu\n\n", address, size, n->size);
31+ debug ("OP WRITE FAILED" , n -> id );
2332 }
2433}
2534
2635void node_cycle (struct node * n ) {
2736 while (1 ) {
2837 // cycle of node
29- struct queue * q = queue_init ();
30- struct message * m ;
31- m = receive_message (q );
32-
38+ // OLD FIXME struct queue *q = queue_init();
39+ struct message * m = generate_message (0 , 0 , 0 , 0 , 0 , OP_NONE );
40+ MPI_Status st ;
41+ MPI_Recv (m , sizeof (struct message ), MPI_BYTE , MPI_ANY_SOURCE , 3 , MPI_COMM_WORLD , & st );
42+ debug ("Recv OP" , n -> id );
3343 switch (m -> op ) {
3444 case OP_OK :
3545 break ;
36- case OP_MALLOC :
37- break ;
38- case OP_FREE :
39- break ;
4046 case OP_WRITE : {
47+ debug ("Write OP : send OK" , n -> id );
48+ struct message * mW = generate_message (n -> id , m -> id_s , n -> id , 0 , 0 , OP_OK );
49+ MPI_Send (mW , sizeof (struct message ), MPI_BYTE , mW -> id_t , 3 , MPI_COMM_WORLD );
4150 size_t addr = m -> address ;
4251 size_t size = m -> size ;
4352 char * data = malloc (size * sizeof (char ));
44- MPI_Status st ;
45- MPI_Recv (data , size , MPI_BYTE , m -> id_s , 4 , MPI_COMM_WORLD , & st );
53+ MPI_Status st3 ;
54+ MPI_Recv (data , size , MPI_BYTE , m -> id_s , 4 , MPI_COMM_WORLD , & st3 );
4655 write_on_node (n , addr , data , size );
4756 free (data );
4857 }
4958 break ;
5059 case OP_READ :
5160 break ;
52- case OP_SNAP :
53- break ;
54- case OP_LEADER :
55- break ;
56- case OP_WHOISLEADER :
57- break ;
58- case OP_REVIVE :
59- break ;
60- case OP_KILL :
61- break ;
62- case OP_TEST :
63- break ;
64- case OP_NONE :
65- break ;
66- case OP_DUMP :
67- break ;
68- case OP_LEADER_OK :
69- break ;
70- case OP_ALIVE :
71- break ;
72- case OP_LEADER_AGAIN :
61+ default :
7362 break ;
7463 }
7564 if (m -> op == OP_KILL )
0 commit comments