scc_signals.c 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. #include "scc_signals.h"
  2. extern RCCE_FLAG flag_signals_enabled,flag_data_written;
  3. extern int *sig_array, *data_array, NUES;
  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];
  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 || 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. }
  26. error = RCCE_put((t_vcharp)(&sig_array[node_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), target_ID);
  27. if (error != RCCE_SUCCESS) {
  28. RCCE_error_string(error, error_str, &str_len);
  29. fprintf(log_file,"I got an error in put with descr %s\n",error_str);
  30. fflush(log_file);
  31. }
  32. fprintf(log_file,"I leave\n");
  33. fflush(log_file);
  34. return error;
  35. }
  36. void scc_signals_check(void) {
  37. int sig_read_ar[LINE_SIZE], sig_array_local[LINE_SIZE], error, str_len, sender_id, i, sig, j, dummy;
  38. RCCE_FLAG_STATUS receiver_status;
  39. char error_str[64];
  40. for (i=0; i<LINE_SIZE; i++) sig_array_local[i] = NO_SIG;
  41. //disable signals here
  42. //RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_UNSET, node_id);
  43. //rintf(log_file,"I enter\n");
  44. for (sender_id=0; sender_id<36; sender_id++) {
  45. if (sender_id == node_id) continue;
  46. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_UNSET, node_id);
  47. dummy=0;
  48. for (i=0; i<100; i++)
  49. for(j=0; j<100; j++) dummy++;
  50. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&sig_array[sender_id*LINE_SIZE]), LINE_SIZE * sizeof(int), node_id);
  51. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_SET, node_id);
  52. if (error != RCCE_SUCCESS) {
  53. RCCE_error_string(error, error_str, &str_len);
  54. fprintf(log_file,"I got an error in get from %d with descr %s\n",sender_id,error_str);
  55. fflush(log_file);
  56. } else {
  57. if (sig_read_ar[3] == SIG_INIT) {
  58. sig_INIT_handler(sender_id);
  59. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  60. } else if (sig_read_ar[3] == SIG_ACK) {
  61. sig_ACK_handler(sender_id);
  62. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  63. } else if (sig_read_ar[3] == SIG_TERMINATE) {
  64. sig_TERMINATE_handler(sender_id);
  65. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  66. } else if (sig_read_ar[3] == SIG_INIT_APP) {
  67. sig_INIT_APP_handler(sender_id);
  68. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  69. } else if (sig_read_ar[3] == SIG_IDAG_FIND_IDAGS) {
  70. sig_IDAG_FIND_IDAGS_handler(sender_id);
  71. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  72. } else if (sig_read_ar[3] == SIG_REQ_DDS) {
  73. sig_REQ_DDS_handler(sender_id);
  74. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  75. } else if (sig_read_ar[3] == SIG_REQ_CORES) {
  76. sig_REQ_CORES_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_REP_OFFERS) {
  79. sig_REP_OFFERS_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_INIT_AGENT) {
  82. sig_INIT_AGENT_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_ADD_CORES_DDS) {
  85. sig_ADD_CORES_DDS_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_REM_CORES_DDS) {
  88. sig_REM_CORES_DDS_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_APPOINT_WORK) {
  91. sig_APPOINT_WORK_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_CHECK_REM_TIME) {
  94. sig_CHECK_REM_TIME_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_FINISH) {
  97. sig_FINISH_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_REJECT) {
  100. sig_REJECT_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_APP_TERMINATED) {
  103. num_apps_terminated++;
  104. fprintf(log_file,"app_terminated = %d sender_id = %d\n",num_apps_terminated,sender_id);
  105. fflush(log_file);
  106. //error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  107. } else if (sig_read_ar[3] != NO_SIG) {
  108. fprintf(log_file,"I read smth different than no_sig which is %d from %d\n",sig_read_ar[0],sender_id);
  109. fflush(log_file);
  110. }
  111. sig = sig_read_ar[3];
  112. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_UNSET, node_id);
  113. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&sig_array[sender_id*LINE_SIZE]), LINE_SIZE * sizeof(int), node_id);
  114. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_SET, node_id);
  115. if (sig_read_ar[4] != sig_read_ar[3]) {
  116. 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]);
  117. fflush(log_file);
  118. /*if (sig_read_ar[1] == SIG_INIT) {
  119. sig_INIT_handler(sender_id);
  120. } else if (sig_read_ar[1] == SIG_ACK) {
  121. sig_ACK_handler(sender_id);
  122. } else if (sig_read_ar[1] == SIG_TERMINATE) {
  123. sig_TERMINATE_handler(sender_id);
  124. } else if (sig_read_ar[1] == SIG_IDAG_FIND_IDAGS) {
  125. sig_IDAG_FIND_IDAGS_handler(sender_id);
  126. } else if (sig_read_ar[1] == SIG_REQ_DDS) {
  127. sig_REQ_DDS_handler(sender_id);
  128. } else if (sig_read_ar[1] == SIG_REQ_CORES) {
  129. sig_REQ_CORES_handler(sender_id);
  130. } else if (sig_read_ar[1] == SIG_REP_OFFERS) {
  131. sig_REP_OFFERS_handler(sender_id);
  132. } else if (sig_read_ar[1] == SIG_INIT_AGENT) {
  133. sig_INIT_AGENT_handler(sender_id);
  134. } else if (sig_read_ar[1] == SIG_ADD_CORES_DDS) {
  135. sig_ADD_CORES_DDS_handler(sender_id);
  136. } else if (sig_read_ar[1] == SIG_REM_CORES_DDS) {
  137. sig_REM_CORES_DDS_handler(sender_id);
  138. } else if (sig_read_ar[1] == SIG_APPOINT_WORK) {
  139. sig_APPOINT_WORK_handler(sender_id);
  140. } else if (sig_read_ar[1] == SIG_CHECK_REM_TIME) {
  141. sig_CHECK_REM_TIME_handler(sender_id);
  142. } else */
  143. if (sig_read_ar[4] == SIG_INIT_APP) {
  144. sig_INIT_APP_handler(sender_id);
  145. } else if (sig_read_ar[4] == SIG_FINISH) {
  146. sig_FINISH_handler(sender_id);
  147. } else if (sig_read_ar[4] == SIG_REJECT) {
  148. sig_REJECT_handler(sender_id);
  149. } else if (sig_read_ar[4] == SIG_APP_TERMINATED) {
  150. num_apps_terminated++;
  151. fprintf(log_file,"app_terminated = %d sender_id = %d\n",num_apps_terminated,sender_id);
  152. fflush(log_file);
  153. } else if (sig_read_ar[4] != NO_SIG) {
  154. fprintf(log_file,"I read smth different than no_sig which is %d from %d\n",sig_read_ar[1],sender_id);
  155. fflush(log_file);
  156. }
  157. }
  158. if (sig_read_ar[3] != NO_SIG) {
  159. //sig = sig_read_ar[0];
  160. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_UNSET, node_id);
  161. dummy=0;
  162. for (i=0; i<100; i++)
  163. for(j=0; j<100; j++) dummy++;
  164. error = RCCE_get((t_vcharp)(&sig_read_ar[0]), (t_vcharp)(&sig_array[sender_id*LINE_SIZE]), LINE_SIZE * sizeof(int), node_id);
  165. if (sig == sig_read_ar[3]) {
  166. error = RCCE_put((t_vcharp)(&sig_array[sender_id*LINE_SIZE]), (t_vcharp)(&sig_array_local[0]), LINE_SIZE * sizeof(int), node_id);
  167. fprintf(log_file,"I invalidated sender_ids %d signals\n",sender_id);
  168. fflush(log_file);
  169. }
  170. RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_SET, node_id);
  171. }
  172. }
  173. }
  174. //RCCE_flag_write(&flag_signals_enabled, RCCE_FLAG_SET, node_id);
  175. //fprintf(log_file,"I leave\n");
  176. //fflush(log_file);
  177. }