HYD_status HYDTI_bscd_ssh_store_launch_time(char *hostname) { int i, oldest, time_left; struct timeval now; struct HYDT_bscd_ssh_time *e; HYD_status status = HYD_SUCCESS; for (e = HYDT_bscd_ssh_time; e; e = e->next) if (!strcmp(hostname, e->hostname)) break; if (e == NULL) { /* Couldn't find an element for this host */ status = create_element(hostname, &e); HYDU_ERR_POP(status, "unable to create ssh time element\n"); } /* Search for an unset element to store the current time */ for (i = 0; i < HYDT_bscd_ssh_limit; i++) { if (e->init_time[i].tv_sec == 0 && e->init_time[i].tv_usec == 0) { gettimeofday(&e->init_time[i], NULL); goto fn_exit; } } /* No free element found; wait for the oldest element to turn * older */ oldest = 0; for (i = 0; i < HYDT_bscd_ssh_limit; i++) if (older(e->init_time[i], e->init_time[oldest])) oldest = i; gettimeofday(&now, NULL); time_left = HYDT_bscd_ssh_limit_time - now.tv_sec + e->init_time[oldest].tv_sec; /* A better approach will be to make progress here, but that would * mean that we need to deal with nested calls to the demux engine * and process launches. */ if (time_left > 0) { if (HYDT_bscd_ssh_warnings) HYDU_dump(stdout, "WARNING: too many ssh connections to %s; waiting %d seconds\n", hostname, time_left); sleep(time_left); } /* Store the current time in the oldest element */ gettimeofday(&e->init_time[oldest], NULL); fn_exit: return status; fn_fail: goto fn_exit; }
void GCTask::destruct() { assert(older() == NULL, "shouldn't have an older task"); assert(newer() == NULL, "shouldn't have a newer task"); // Nothing to do. }
void GCTask::print(const char* message) const { tty->print(INTPTR_FORMAT " <- " INTPTR_FORMAT "(%u) -> " INTPTR_FORMAT, p2i(newer()), p2i(this), affinity(), p2i(older())); }
void GCTask::print(const char* message) const { tty->print(INTPTR_FORMAT " <- " INTPTR_FORMAT "(%u) -> " INTPTR_FORMAT, newer(), this, affinity(), older()); }
int main() { derived2* p = new derived2; older(p); newer(p); return 0; }