THRIFT-3146 Graphviz generates function name collisions between services
Client: Graphviz
Patch: Adam Beberg
diff --git a/compiler/cpp/src/generate/t_gv_generator.cc b/compiler/cpp/src/generate/t_gv_generator.cc
index 4511b29..59e06a0 100644
--- a/compiler/cpp/src/generate/t_gv_generator.cc
+++ b/compiler/cpp/src/generate/t_gv_generator.cc
@@ -298,10 +298,11 @@
   for (; fn_iter != functions.end(); fn_iter++) {
     string fn_name = (*fn_iter)->get_name();
 
-    f_out_ << "function_" << fn_name;
+    f_out_ << "function_" << service_name << fn_name;
     f_out_ << "[label=\"<return_type>function " << escape_string(fn_name);
     f_out_ << " :: ";
-    print_type((*fn_iter)->get_returntype(), "function_" + fn_name + ":return_type");
+    print_type((*fn_iter)->get_returntype(),
+               "function_" + service_name + fn_name + ":return_type");
 
     vector<t_field*> args = (*fn_iter)->get_arglist()->get_members();
     vector<t_field*>::iterator arg_iter = args.begin();
@@ -313,8 +314,8 @@
         print_const_value((*arg_iter)->get_type(), (*arg_iter)->get_value());
       }
       f_out_ << " :: ";
-      print_type((*arg_iter)->get_type(),
-                 "function_" + fn_name + ":param_" + (*arg_iter)->get_name());
+      print_type((*arg_iter)->get_type(), "function_" + service_name + fn_name
+                 + ":param_" + (*arg_iter)->get_name());
     }
     // end of node
     f_out_ << "\"];" << endl;
@@ -324,8 +325,8 @@
       vector<t_field*> excepts = (*fn_iter)->get_xceptions()->get_members();
       vector<t_field*>::iterator ex_iter = excepts.begin();
       for (; ex_iter != excepts.end(); ex_iter++) {
-        edges.push_back("function_" + fn_name + " -> " + (*ex_iter)->get_type()->get_name()
-                        + " [color=red]");
+        edges.push_back("function_" + service_name + fn_name + " -> "
+                        + (*ex_iter)->get_type()->get_name() + " [color=red]");
       }
     }
   }