示例#1
0
int
main (int argc, char *argv[])
{
  pwr_tStatus	sts = 1;
  qdb_sPort	port;
  qdb_sPort	*pp;
  qcom_sQid	qid = qdb_cQimport;
  qdb_sNode	*np;

  errh_Init("pwr_qimp");

  if (!qcom_Init(&sts, NULL)) exit(sts);

  if (!qcom_CreateQ(&sts, &qid, NULL)) exit(sts);

  port.sa.sin_family = AF_INET;  
  port.sa.sin_addr.s_addr = htonl(INADDR_ANY);
  port.sa.sin_port = qdb->my_node->sa.sin_port;

  pp = qnet_Open(&sts, &port);

  while (qdb->g->up) {
    np = qnet_Get(&sts, pp);
    if (np->bp == NULL) pwr_Bugcheck(QCOM__WEIRD, "(np->bp == NULL)");
    linkEvent(pp, np);
  }

  qnet_Close(&sts, pp);
  qcom_Exit(&sts);

  exit(QCOM__SUCCESS);
}
示例#2
0
static pwr_tStatus
terminate (
  ini_sContext	*cp
)
{
  pwr_tStatus	sts;

  qcom_SignalAnd(&sts, &qcom_cQini, 0);
  qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_terminate);

  qcom_Exit(NULL);

  /* Now sleep for a while */
  
  sleep(3);
  
  /* Unlink shared memory and semaphores */
  
  qdb_UnlinkDb();

  /* Unlink errlog mwessage queue */
  errl_Unlink();

  exit(1);
}
示例#3
0
static pwr_tStatus
terminate (
  ini_sContext	*cp
)
{
  pwr_tStatus	sts;

  qcom_SignalAnd(&sts, &qcom_cQini, 0);
  qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_terminate);

  //qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_oldPlcStop);
  //qcom_WaitAnd(&sts, &cp->eventQ, &qcom_cQini, ini_mEvent_oldPlcStopDone, qcom_cTmoEternal);

  qcom_Exit(NULL);

  /* Kill programs which until now doesn't handle qcom */
/*  
  for (pp = lst_Succ(NULL, &cp->proc_lh, &pl); pp != NULL; pp = lst_Succ(NULL, pl, &pl)) {
    if (strncmp("pwr_webmonmh", pp->proc.name, 12) == 0) {
      kill(pp->proc.pid, SIGKILL);
    }
    else if (strncmp("pwr_webmon", pp->proc.name, 10) == 0) {
      kill(pp->proc.pid, SIGKILL);
    }
  }
*/  
  /* Now sleep for a while */
  
  sleep(3);
  
  /* Unlink shared memory and semaphores */
  
  gdb_UnlinkDb();
  qdb_UnlinkDb();

  /* Destroy message handler semaphore */
  
  mh_UtilDestroyEvent();

#if defined OS_POISIX
    /* Unlink errlog mwessage queue */
    errl_Unlink();
  #endif

  exit(1);
}
示例#4
0
文件: rt_ini.c 项目: siamect/proview
static pwr_tStatus terminate()
{
  pwr_tStatus sts;

  qcom_SignalAnd(&sts, &qcom_cQini, 0);
  qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_terminate);

  // qcom_SignalOr(&sts, &qcom_cQini, ini_mEvent_oldPlcStop);
  // qcom_WaitAnd(&sts, &cp->eventQ, &qcom_cQini, ini_mEvent_oldPlcStopDone,
  // qcom_cTmoEternal);

  qcom_Exit(NULL);

  /* Kill programs which until now doesn't handle qcom */
  /*
    for (pp = lst_Succ(NULL, &cp->proc_lh, &pl); pp != NULL; pp = lst_Succ(NULL,
    pl, &pl)) {
      if (str_StartsWith(pp->proc.name, "pwr_webmonmh")) {
        kill(pp->proc.pid, SIGKILL);
      }
      else if (str_StartsWith(pp->proc.name, "pwr_webmon")) {
        kill(pp->proc.pid, SIGKILL);
      }
    }
  */
  /* Now sleep for a while */

  sleep(3);

  /* Unlink shared memory and semaphores */

  gdb_UnlinkDb();
  qdb_UnlinkDb();
  delete_locks();

  /* Destroy message handler semaphore */

  mh_UtilDestroyEvent();

  /* Unlink errlog message queue */
  errl_Unlink();

  exit(EXIT_SUCCESS);
}
示例#5
0
main (int argc, char *argv[])
{
  pwr_tStatus	sts;
  qcom_sQid	qid;
  qcom_sGet	get;
  qcom_sPut	put;
  qcom_sQid	loop;
  int		data[DATA_SIZE];
  int		i;
  int		j;
  int		max = 1000;
  char		*sp;

  qid = qcom_cNQid;

  if (argc < 2) exit(12);
  if (argc > 2) max = atoi(argv[2]);

  for (j = 0; j < DATA_SIZE; j++)
    data[j] = j;

  loop.nid = atoi(argv[1]);
  loop.qix = qcom_cIloopBack;

  if (!qcom_Init(&sts, NULL)) exit(sts);
  if (!qcom_CreateQ(&sts, &qid, NULL)) exit(sts);

  for (i = 1; i < max; i++) {
    for (j = 0; j < DATA_SIZE; j++)
      ++data[j];
    sp = qcom_Alloc(&sts, sizeof(data));
    if (sp == NULL) exit(sts);
    memcpy(sp, &data, sizeof(data));
    put.type.b = 10;
    put.type.s = i;
    put.reply = qid;
    put.size = sizeof(data);
    put.data = sp;
    qcom_Put(&sts, &loop, &put);
    if (EVEN(sts)) exit(sts);
    get.data = NULL;
    sp = qcom_Get(&sts, &qid, &get, qcom_cTmoEternal);  
    if (sp == NULL) continue;
    for (j = 0; j < DATA_SIZE; j++) {
      if (data[j] != *(int *)sp) {
	printf("index...: %d, (%d)\n", j, data[j]);
	break;
      }
      sp += sizeof(int);
    }
//    printf("\nsender..: %d,%X\n", get.sender.nid, get.pid);
//    printf("receiver: %d,%d\n", get.receiver.nid, get.receiver.qix);
//    printf("reply...: %d,%d\n", get.reply.nid, get.reply.qix);
//    printf("type....: %d,%d\n", get.type.b, get.type.s);
//    printf("size....: %d\n", get.size);
//    printf("memcmp..: %d\n", memcmp(get.data, &data, sizeof(data)));
//    printf("index...: %d, (%d)\n", j, data[j]);
    qcom_Free(&sts, get.data);
  }

  qcom_Exit(&sts);
}
示例#6
0
main (int argc, char *argv[])
{
  pwr_tStatus	sts;
  qcom_sQid	qid;
  qcom_sGet	get;
  qcom_sPut	put;
  qcom_sQid	loop;
  int		data[500];
  int		i;
  int		j;
  int		max = 1000;
  char		*sp;
  int tmo;

  qid = qcom_cNQid;

  if (argc < 2) exit(12);
  if (argc > 2) max = atoi(argv[2]);

  for (j = 0; j < 500; j++)
    data[j] = j;

  loop.nid = atoi(argv[1]);
  loop.qix = qcom_cIloopBack;

  if (!qcom_Init(&sts, NULL)) exit(sts);
  if (!qcom_CreateQ(&sts, &qid, NULL)) exit(sts);

  for (i = 1; i < max; i++) {
    for (j = 0; j < 500; j++)
      ++data[j];
    sp = qcom_Alloc(&sts, sizeof(data));
    if (sp == NULL) exit(sts);
    memcpy(sp, &data, sizeof(data));
    put.type.b = 10;
    put.type.s = i;
    put.reply = qid;
    put.size = sizeof(data);
    put.data = sp;

    get.data = NULL;

    
    tmo = 10 + (i%3)*3000;
    sp = qcom_Request(&sts, &loop, &put, &qid, &get, tmo);

    if (sp == NULL) {
      printf("\n%d tmo: %d empty buffer\n", i, tmo);
      continue;
    }
    for (j = 0; j < 500; j++) {
      if (data[j] != *(int *)sp) break;
      sp += sizeof(int);
    }
    printf("\nsender..: %d,%X\n", get.sender.nid, get.pid);
    printf("receiver: %d,%d\n", get.receiver.nid, get.receiver.qix);
    printf("reply...: %d,%d\n", get.reply.nid, get.reply.qix);
    printf("type....: %d,%d\n", get.type.b, get.type.s);
    printf("size....: %d\n", get.size);
    printf("memcmp..: %d\n", memcmp(get.data, &data, sizeof(data)));
    printf("index...: %d, (%d)\n", j, data[j]);
    qcom_Free(&sts, get.data);
  }

  qcom_Exit(&sts);
}