static void handle_request(int iscsi_fd, const struct iscsi_daemon_request *request, int timeout) { struct connection *conn; log_set_peer_addr(request->idr_conf.isc_target_addr); if (request->idr_conf.isc_target[0] != '\0') { log_set_peer_name(request->idr_conf.isc_target); setproctitle("%s (%s)", request->idr_conf.isc_target_addr, request->idr_conf.isc_target); } else { setproctitle("%s", request->idr_conf.isc_target_addr); } conn = connection_new(request->idr_session_id, &request->idr_conf, iscsi_fd); set_timeout(timeout); capsicate(conn); login(conn); if (conn->conn_conf.isc_discovery != 0) discovery(conn); else handoff(conn); log_debugx("nothing more to do; exiting"); exit (0); }
void Main () { int i, p, c, r; for (i = 0, p = Getpid (); i < NUMPROCS; i++, p = c) { Printf ("%d about to fork\n", Getpid ()); if ((c = Fork ()) == 0) { Printf ("%d starting\n", Getpid ()); handoff (p); Printf ("%d exiting\n", Getpid ()); Exit (); } Printf ("%d just forked %d\n", Getpid (), c); } Printf ("%d yielding to %d\n", Getpid (), c); r = Yield (c); Printf ("%d resumed by %d, yielding to %d\n", Getpid (), r, c); Yield (c); Printf ("%d exiting\n", Getpid ()); }