veyron/runtimes/google/ipc: Preventing addName and removeName cuasing panics
(nil s.names map) if called before Serve() or ServerDispatcher().
Return error instead.

Change-Id: I9eb68f62a2eedf90afa2e4c99d2c229c7febd52d
diff --git a/runtimes/google/ipc/server.go b/runtimes/google/ipc/server.go
index c30c097..2b4cd88 100644
--- a/runtimes/google/ipc/server.go
+++ b/runtimes/google/ipc/server.go
@@ -495,11 +495,14 @@
 	s.Lock()
 	defer s.Unlock()
 	ivtrace.FromContext(s.ctx).Annotate("Serving under name: " + name)
+	if len(name) == 0 {
+		return fmt.Errorf("empty name")
+	}
 	if s.stopped {
 		return errServerStopped
 	}
-	if len(name) == 0 {
-		return fmt.Errorf("empty name")
+	if s.disp == nil {
+		return fmt.Errorf("Adding name before calling Serve or ServeDispatcher is not allowed")
 	}
 	s.publisher.AddName(name)
 	// TODO(cnicolaou): remove this map when the publisher's RemoveName
@@ -515,6 +518,9 @@
 	if s.stopped {
 		return errServerStopped
 	}
+	if s.disp == nil {
+		return fmt.Errorf("Removing name before calling Serve or ServeDispatcher is not allowed")
+	}
 	if _, present := s.names[name]; !present {
 		return fmt.Errorf("%q has not been previously used for this server", name)
 	}