scc_signals.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. #include "scc_signals.h"
  2. extern RCCE_FLAG flag_signals_enabled,flag_data_written;
  3. extern int *sig_array, *data_array, NUES, my_idag;
  4. extern int node_id, num_apps_terminated;
  5. extern FILE *log_file;
  6. int scc_kill(int target_ID, int sig) {
  7. int sig_array_local[LINE_SIZE], error, str_len, i, sig_read_ar[LINE_SIZE], tmp;
  8. RCCE_FLAG_STATUS receiver_status;
  9. char error_str[64];
  10. fprintf(log_file,"I enter here with target_ID %d and sig %d\n",target_ID,sig);
  11. fflush(log_file);
  12. for (i=0; i<LINE_SIZE; i++)
  13. sig_array_local[i] = sig;
  14. RCCE_flag_read(flag_signals_enabled, &receiver_status, target_ID);
  15. //if (receiver_status == RCCE_FLAG_UNSET) printf("I am %d kai signals of 0 are disabled\n",ME);
  16. while (receiver_status == RCCE_FLAG_UNSET)
  17. RCCE_flag_read(flag_signals_enabled, &receiver_status, target_ID);
  18. if (sig == SIG_REJECT || (sig == SIG_FINISH && target_ID != my_idag) || sig == SIG_APP_TERMINATED || (sig == SIG_INIT_APP && target_ID == 0)) {
  19. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&sig_array[node_id*LINE_SIZE]), LINE_SIZE * sizeof(int), target_ID);
  20. if (sig_read_ar[3] != NO_SIG && sig_read_ar[3] != SIG_ACK) {
  21. fprintf(log_file,"I have allready sent sig %d\n",sig_read_ar[3]);
  22. fflush(log_file);
  23. sig_array_local[3] = sig_read_ar[3];
  24. }
  25. } else if (sig == SIG_IDAG_FIND_IDAGS) {
  26. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&sig_array[node_id*LINE_SIZE]), LINE_SIZE * sizeof(int), target_ID);
  27. //if (sig_read_ar[3] != NO_SIG && sig_read_ar[3] != SIG_ACK) {
  28. if (sig_read_ar[3] == SIG_REJECT || sig_read_ar[3] == SIG_FINISH || sig_read_ar[3] == SIG_APP_TERMINATED || (sig_read_ar[3] == SIG_INIT_APP && target_ID == 0)) {
  29. fprintf(log_file,"I have allready sent minor sig %d\n",sig_read_ar[3]);
  30. fflush(log_file);
  31. /*tmp = sig_read_ar[3];
  32. sig_array_local[3] = sig;
  33. sig_array_local[4] = tmp;*/
  34. sig_array_local[3] = sig_read_ar[3];
  35. }
  36. } else if (sig == SIG_ACK) {
  37. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&sig_array[node_id*LINE_SIZE]), LINE_SIZE * sizeof(int), target_ID);
  38. if (sig_read_ar[3] == SIG_ACK) {
  39. fprintf(log_file,"I have allready sent SIG_ACK\n");
  40. fflush(log_file);
  41. sig_array_local[5] = NO_SIG;
  42. }
  43. }
  44. error = RCCE_put((t_vcharp)(&sig_array[node_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), target_ID);
  45. if (error != RCCE_SUCCESS) {
  46. RCCE_error_string(error, error_str, &str_len);
  47. fprintf(log_file,"I got an error in put with descr %s\n",error_str);
  48. fflush(log_file);
  49. }
  50. fprintf(log_file,"I leave\n");
  51. fflush(log_file);
  52. return error;
  53. }
  54. void scc_signals_check(void) {
  55. int sig_read_ar[LINE_SIZE], sig_array_local[LINE_SIZE], error, str_len, sender_id, i, sig, j, dummy;
  56. RCCE_FLAG_STATUS receiver_status;
  57. char error_str[64];
  58. for (i=0; i<LINE_SIZE; i++) sig_array_local[i] = NO_SIG;
  59. //disable signals here
  60. //RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_UNSET, node_id);
  61. //rintf(log_file,"I enter\n");
  62. for (sender_id=0; sender_id<36; sender_id++) {
  63. if (sender_id == node_id) continue;
  64. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_UNSET, node_id);
  65. dummy=0;
  66. for (i=0; i<100; i++)
  67. for(j=0; j<100; j++) dummy++;
  68. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&sig_array[sender_id*LINE_SIZE]), LINE_SIZE * sizeof(int), node_id);
  69. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_SET, node_id);
  70. if (error != RCCE_SUCCESS) {
  71. RCCE_error_string(error, error_str, &str_len);
  72. fprintf(log_file,"I got an error in get from %d with descr %s\n",sender_id,error_str);
  73. fflush(log_file);
  74. } else {
  75. if (sig_read_ar[3] == SIG_INIT) {
  76. sig_INIT_handler(sender_id);
  77. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  78. } else if (sig_read_ar[3] == SIG_ACK) {
  79. sig_ACK_handler(sender_id);
  80. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  81. } else if (sig_read_ar[3] == SIG_TERMINATE) {
  82. sig_TERMINATE_handler(sender_id);
  83. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  84. } else if (sig_read_ar[3] == SIG_INIT_APP) {
  85. sig_INIT_APP_handler(sender_id);
  86. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  87. } else if (sig_read_ar[3] == SIG_IDAG_FIND_IDAGS) {
  88. sig_IDAG_FIND_IDAGS_handler(sender_id);
  89. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  90. } else if (sig_read_ar[3] == SIG_REQ_DDS) {
  91. sig_REQ_DDS_handler(sender_id);
  92. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  93. } else if (sig_read_ar[3] == SIG_REQ_CORES) {
  94. sig_REQ_CORES_handler(sender_id);
  95. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  96. } else if (sig_read_ar[3] == SIG_REP_OFFERS) {
  97. sig_REP_OFFERS_handler(sender_id);
  98. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  99. } else if (sig_read_ar[3] == SIG_INIT_AGENT) {
  100. sig_INIT_AGENT_handler(sender_id);
  101. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  102. } else if (sig_read_ar[3] == SIG_ADD_CORES_DDS) {
  103. sig_ADD_CORES_DDS_handler(sender_id);
  104. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  105. } else if (sig_read_ar[3] == SIG_REM_CORES_DDS) {
  106. sig_REM_CORES_DDS_handler(sender_id);
  107. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  108. } else if (sig_read_ar[3] == SIG_APPOINT_WORK) {
  109. sig_APPOINT_WORK_handler(sender_id);
  110. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  111. } else if (sig_read_ar[3] == SIG_CHECK_REM_TIME) {
  112. sig_CHECK_REM_TIME_handler(sender_id);
  113. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  114. } else if (sig_read_ar[3] == SIG_FINISH) {
  115. sig_FINISH_handler(sender_id);
  116. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  117. } else if (sig_read_ar[3] == SIG_REJECT) {
  118. sig_REJECT_handler(sender_id);
  119. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  120. } else if (sig_read_ar[3] == SIG_APP_TERMINATED) {
  121. num_apps_terminated++;
  122. fprintf(log_file,"app_terminated = %d sender_id = %d\n",num_apps_terminated,sender_id);
  123. fflush(log_file);
  124. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  125. } else if (sig_read_ar[3] != NO_SIG) {
  126. fprintf(log_file,"I read smth different than no_sig which is %d from %d\n",sig_read_ar[0],sender_id);
  127. fflush(log_file);
  128. }
  129. sig = sig_read_ar[3];
  130. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_UNSET, node_id);
  131. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&sig_array[sender_id*LINE_SIZE]), LINE_SIZE * sizeof(int), node_id);
  132. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_SET, node_id);
  133. if (sig_read_ar[4] != sig_read_ar[3]) {
  134. fprintf(log_file,"I have a second signal %d first sig was %d not it is %d\n",sig_read_ar[4],sig,sig_read_ar[3]);
  135. fflush(log_file);
  136. /*if (sig_read_ar[1] == SIG_INIT) {
  137. sig_INIT_handler(sender_id);
  138. } else if (sig_read_ar[1] == SIG_ACK) {
  139. sig_ACK_handler(sender_id);
  140. } else if (sig_read_ar[1] == SIG_TERMINATE) {
  141. sig_TERMINATE_handler(sender_id);
  142. } else if (sig_read_ar[1] == SIG_IDAG_FIND_IDAGS) {
  143. sig_IDAG_FIND_IDAGS_handler(sender_id);
  144. } else if (sig_read_ar[1] == SIG_REQ_DDS) {
  145. sig_REQ_DDS_handler(sender_id);
  146. } else if (sig_read_ar[1] == SIG_REQ_CORES) {
  147. sig_REQ_CORES_handler(sender_id);
  148. } else if (sig_read_ar[1] == SIG_REP_OFFERS) {
  149. sig_REP_OFFERS_handler(sender_id);
  150. } else if (sig_read_ar[1] == SIG_INIT_AGENT) {
  151. sig_INIT_AGENT_handler(sender_id);
  152. } else if (sig_read_ar[1] == SIG_ADD_CORES_DDS) {
  153. sig_ADD_CORES_DDS_handler(sender_id);
  154. } else if (sig_read_ar[1] == SIG_REM_CORES_DDS) {
  155. sig_REM_CORES_DDS_handler(sender_id);
  156. } else if (sig_read_ar[1] == SIG_APPOINT_WORK) {
  157. sig_APPOINT_WORK_handler(sender_id);
  158. } else if (sig_read_ar[1] == SIG_CHECK_REM_TIME) {
  159. sig_CHECK_REM_TIME_handler(sender_id);*/
  160. if (sig_read_ar[4] == SIG_IDAG_FIND_IDAGS) {
  161. sig_IDAG_FIND_IDAGS_handler(sender_id);
  162. } else if (sig_read_ar[4] == SIG_INIT_APP) {
  163. sig_INIT_APP_handler(sender_id);
  164. } else if (sig_read_ar[4] == SIG_FINISH) {
  165. sig_FINISH_handler(sender_id);
  166. } else if (sig_read_ar[4] == SIG_REJECT) {
  167. sig_REJECT_handler(sender_id);
  168. } else if (sig_read_ar[4] == SIG_APP_TERMINATED) {
  169. num_apps_terminated++;
  170. fprintf(log_file,"app_terminated = %d sender_id = %d\n",num_apps_terminated,sender_id);
  171. fflush(log_file);
  172. } else if (sig_read_ar[4] != NO_SIG) {
  173. fprintf(log_file,"I read smth different than no_sig which is %d from %d\n",sig_read_ar[1],sender_id);
  174. fflush(log_file);
  175. }
  176. }
  177. if (sig_read_ar[3] != NO_SIG) {
  178. //sig = sig_read_ar[0];
  179. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_UNSET, node_id);
  180. dummy=0;
  181. for (i=0; i<100; i++)
  182. for(j=0; j<1000; j++) dummy++;
  183. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&sig_array[sender_id*LINE_SIZE]), LINE_SIZE * sizeof(int), node_id);
  184. if (sig == sig_read_ar[3] && sig_read_ar[5] != NO_SIG) {
  185. error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  186. fprintf(log_file,"I invalidated sender_ids %d signals\n",sender_id);
  187. fflush(log_file);
  188. } else if (sig_read_ar[5] == NO_SIG) {
  189. sig_array_local[3] = SIG_ACK;
  190. error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  191. fprintf(log_file,"I kept sig_ack\n");
  192. fflush(log_file);
  193. }
  194. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_SET, node_id);
  195. }
  196. }
  197. }
  198. //RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_SET, node_id);
  199. //fprintf(log_file,"I leave\n");
  200. //fflush(log_file);
  201. }