From 0ee1bbb9f7c4d253d4f9597ddaebb8b539ed39cc Mon Sep 17 00:00:00 2001 From: Timothy Stack <stack@flux.utah.edu> Date: Tue, 8 Mar 2005 08:45:32 +0000 Subject: [PATCH] Handle groups of event-sequences correctly and fix the build deps again... --- event/sched/GNUmakefile.in | 23 +++++++++++++++-------- event/sched/group-agent.c | 12 +++++++++++- event/sched/local-agent.c | 4 ++-- event/sched/local-agent.h | 6 +++++- event/sched/node-agent.cc | 1 + 5 files changed, 34 insertions(+), 12 deletions(-) diff --git a/event/sched/GNUmakefile.in b/event/sched/GNUmakefile.in index b5a90683e3..aef9660155 100644 --- a/event/sched/GNUmakefile.in +++ b/event/sched/GNUmakefile.in @@ -61,17 +61,24 @@ OBJS = \ event-sched_rrpc: $(OBJS) event-sched.h ../lib/libevent.a $(CXX) $(CFLAGS) -static $(LDFLAGS) -o $@ $(OBJS) $(ULXRLIBS) $(LIBS) -queue.o: event-sched.h -listNode.o: listNode.h event-sched.h -error-record.o: error-record.h event-sched.h rpc.h listNode.h ../lib/event.h -local-agent.o: local-agent.h event-sched.h rpc.h listNode.h ../lib/event.h -group-agent.o: group-agent.h local-agent.h event-sched.h rpc.h listNode.h ../lib/event.h -event-sched_rpc.o: event-sched.c local-agent.h event-sched.h rpc.h listNode.h ../lib/event.h +DEPS = \ + error-record.h event-sched.h group-agent.h listNode.h \ + local-agent.h node-agent.h rpc.h simulator-agent.h timeline-agent.h \ + ../lib/event.h + +queue.o: $(DEPS) +listNode.o: $(DEPS) +error-record.o: $(DEPS) +local-agent.o: $(DEPS) +group-agent.o: $(DEPS) +simulator-agent.o: $(DEPS) +node-agent.o: $(DEPS) +event-sched_rpc.o: $(DEPS) $(CC) $(CFLAGS) -DRPC -c -o $@ $< rpc.o: rpc.cc rpc.h event-sched.h $(CXX) $(CXXFLAGS) -DSSHRPC $(ULXRINC) -c $< -rrpc.o: rpc.cc rpc.h event-sched.h +rrpc.o: $(DEPS) $(CXX) -g $(CXXFLAGS) -DSSLRPC $(ULXRINC) -c -o rrpc.o $< install: event-sched_rrpc @@ -79,7 +86,7 @@ install: event-sched_rrpc $(INSTALL_PROGRAM) $< $(INSTALL_DIR)/opsdir/sbin/event-sched -mkdir -p $(INSTALL_DIR)/opsdir/man/man8 $(INSTALL) -m 0644 $(SRCDIR)/event-sched.8 \ - $(DESTDIR)$(INSTALL_DIR)/opsdir/man/man8/event-sched.8 + $(INSTALL_DIR)/opsdir/man/man8/event-sched.8 control-install: event-sched_rrpc $(INSTALL_PROGRAM) $< $(INSTALL_SBINDIR)/event-sched diff --git a/event/sched/group-agent.c b/event/sched/group-agent.c index 8709003ef0..ef51da3005 100644 --- a/event/sched/group-agent.c +++ b/event/sched/group-agent.c @@ -275,7 +275,17 @@ static int group_agent_immediate(local_agent_t la, sched_event_t *se) } if (se->agent.m[1]->handler != NULL) { - local_agent_queue(se->agent.m[1]->handler, se); + if (se->agent.m[1]->handler->la_flags & LAF_MULTIPLE) { + local_agent_queue(se->agent.m[1]->handler, se); + } + else { + int lpc; + + for (lpc = 1; lpc <= ga->ga_count; lpc++) { + local_agent_queue(ga->ga_agents[lpc]->handler, + se); + } + } retval = 0; } diff --git a/event/sched/local-agent.c b/event/sched/local-agent.c index 859aa7e545..9a2d0898fe 100644 --- a/event/sched/local-agent.c +++ b/event/sched/local-agent.c @@ -1,6 +1,6 @@ /* * EMULAB-COPYRIGHT - * Copyright (c) 2004 University of Utah and the Flux Group. + * Copyright (c) 2004, 2005 University of Utah and the Flux Group. * All rights reserved. */ @@ -33,7 +33,7 @@ typedef struct _local_agent_event *local_agent_event_t; int local_agent_invariant(local_agent_t la) { assert(la != NULL); - assert(!(la->la_flags & ~(LAF_IMMEDIATE | LAF_LOOPING))); + assert(!(la->la_flags & ~(LAF_IMMEDIATE|LAF_LOOPING|LAF_MULTIPLE))); lnCheck(&la->la_queue); assert(la->la_handle != NULL); assert(la->la_looper != NULL); diff --git a/event/sched/local-agent.h b/event/sched/local-agent.h index a659012732..f4988961f1 100644 --- a/event/sched/local-agent.h +++ b/event/sched/local-agent.h @@ -1,6 +1,6 @@ /* * EMULAB-COPYRIGHT - * Copyright (c) 2004 University of Utah and the Flux Group. + * Copyright (c) 2004, 2005 University of Utah and the Flux Group. * All rights reserved. */ @@ -29,6 +29,9 @@ enum { a separate thread. */ LAB_LOOPING, /*< Flag number used to indicate that the agent is alive and in its event loop. */ + LAB_MULTIPLE, /*< Flag number used to indicate that the agent can + handle a single event for multiple agents in a + group. */ LAB_MAX }; @@ -36,6 +39,7 @@ enum { enum { LAF_IMMEDIATE = (1L << LAB_IMMEDIATE), LAF_LOOPING = (1L << LAB_LOOPING), + LAF_MULTIPLE = (1L << LAB_MULTIPLE), }; /** diff --git a/event/sched/node-agent.cc b/event/sched/node-agent.cc index f698556468..c752d668db 100644 --- a/event/sched/node-agent.cc +++ b/event/sched/node-agent.cc @@ -90,6 +90,7 @@ node_agent_t create_node_agent(void) retval = NULL; } else { + na->na_local_agent.la_flags |= LAF_MULTIPLE; na->na_local_agent.la_looper = node_agent_looper; retval = na; na = NULL; -- GitLab