Exemplo n.º 1
0
int64_t montecarlo_one_packet_loop(storage_model_t *storage, rpacket_t *packet, int64_t virtual_packet)
{
  rpacket_set_tau_event(packet, 0.0);
  rpacket_set_nu_line(packet, 0.0);
  rpacket_set_virtual_packet(packet, virtual_packet);
  rpacket_set_status(packet, TARDIS_PACKET_STATUS_IN_PROCESS);
  // Initializing tau_event if it's a real packet.
  if (virtual_packet == 0)
    {
      rpacket_reset_tau_event(packet);
    }
  // For a virtual packet tau_event is the sum of all the tau's that the packet passes.
  while (rpacket_get_status(packet) == TARDIS_PACKET_STATUS_IN_PROCESS)
    {
      // Check if we are at the end of line list.
      if (!rpacket_get_last_line(packet))
	{
	  rpacket_set_nu_line(packet, storage->line_list_nu[rpacket_get_next_line_id(packet)]);
	}
      double distance;
      get_event_handler(packet, storage, &distance)(packet, storage, distance);
      if (virtual_packet > 0 && rpacket_get_tau_event(packet) > 10.0)
	{
	  rpacket_set_tau_event(packet, 100.0);
	  rpacket_set_status(packet, TARDIS_PACKET_STATUS_EMITTED);
	}
    } 
  if (virtual_packet > 0)
    {
      rpacket_set_energy(packet, rpacket_get_energy(packet) * exp(-1.0 * rpacket_get_tau_event(packet)));
    }
  return rpacket_get_status(packet) == TARDIS_PACKET_STATUS_REABSORBED ? 1 : 0;
}
Exemplo n.º 2
0
static HRESULT WINAPI HTMLXMLHttpRequest_get_onreadystatechange(IHTMLXMLHttpRequest *iface, VARIANT *p)
{
    HTMLXMLHttpRequest *This = impl_from_IHTMLXMLHttpRequest(iface);

    TRACE("(%p)->(%p)\n", This, p);

    return get_event_handler(&This->event_target, EVENTID_READYSTATECHANGE, p);
}
Exemplo n.º 3
0
Arquivo: event.c Projeto: aosm/X11libs
int
xcb_event_handle(xcb_event_handlers_t *evenths, xcb_generic_event_t *event)
{
    xcb_event_handler_t *eventh = 0;
    assert(event->response_type != 1);

    if(event->response_type == 0)
        eventh = get_error_handler(evenths, ((xcb_generic_error_t *) event)->error_code);
    else
        eventh = get_event_handler(evenths, event->response_type);

    if(eventh->handler)
        return eventh->handler(eventh->data, evenths->c, event);
    return 0;
}
Exemplo n.º 4
0
Arquivo: event.c Projeto: aosm/X11libs
void
xcb_event_set_handler(xcb_event_handlers_t *evenths, int event, xcb_generic_event_handler_t handler, void *data)
{
    set_handler(handler, data, get_event_handler(evenths, event));
}
Exemplo n.º 5
0
int main(
	int argc,	/* Argument count */
	char **argv)	/* Argument vector */
{
	sam_event_t event;
	event_handler_t ev_handler;

	if (dbupd_init(argc, argv) < 0) {
		return (EXIT_FAILURE);
	}

connect:
	/* Keep trying to connect to database until shutdown or retry limit */
	while (num_retry < RETRY_MAX && !is_shutdown &&
	    dbupd_connect() < 0) {
		num_retry++;
		sleep(RETRY_SLEEP);
	}

	/* Keep trying to process events until retry limit or shutdown */
	while (num_retry < RETRY_MAX && !is_shutdown) {
		int status = sam_fsa_read_event(&fsa_inv, &event);
		if (status < 0) {
			/* Error reading event for fs_name */
			SendCustMsg(HERE, 26003, fs_name);
			num_retry++;
			sleep(RETRY_SLEEP);
			goto connect;
		} else if (status == FSA_EOF) {
			/* Reached the end of events, goto sleep for a while */
			sleep(EOF_SLEEP);
		} else if (IS_DB_INODE(event.ev_id.ino) &&
		    IS_DB_INODE(event.ev_pid.ino)) {
			/* Got next event, get event handler and process */
			ev_handler = get_event_handler(event.ev_num);
			if (ev_handler == NULL) {
				/* Unrecognized event for fsname */
				SendCustMsg(HERE, 26006, event.ev_num, fs_name);
				continue;
			}

			/* Handle event */
			if (ev_handler(db_ctx, &event) < 0) {
				mysql_rollback(db_ctx->mysql);
				/* Event processing failed, running check */
				SendCustMsg(HERE, 26007,
				    get_event_name(event.ev_num),
				    event.ev_id.ino, event.ev_id.gen, fs_name);
				if (check_consistency(db_ctx,
				    &event, TRUE) < 0) {
					mysql_rollback(db_ctx->mysql);
					sam_fsa_rollback(&fsa_inv);
					/* Consistency check failed, retrying */
					SendCustMsg(HERE, 26008);
					num_retry++;
					goto connect;
				} else {
					mysql_commit(db_ctx->mysql);
				}
			} else {
				mysql_commit(db_ctx->mysql);
			}
			num_retry = 0;
		} else {
			/*
			 * Event's inode doesn't belong in database,
			 * run consistency to be sure.
			 */
			(void) check_consistency(db_ctx, &event, TRUE);
		}
	}

	/* Close event log */
	sam_fsa_close_inv(&fsa_inv);

	/* Close database */
	sam_db_disconnect(db_ctx);
	sam_db_context_free(db_ctx);

	if (num_retry >= RETRY_MAX) {
		/* Retry max reached, exiting */
		SendCustMsg(HERE, 26005, RETRY_MAX);
	}

	return (is_shutdown && num_retry < RETRY_MAX ?
	    EXIT_SUCCESS : EXIT_FAILURE);
}