Index: /trunk/FACT++/dim/README_v19.txt
===================================================================
--- /trunk/FACT++/dim/README_v19.txt	(revision 11069)
+++ /trunk/FACT++/dim/README_v19.txt	(revision 11070)
@@ -1,4 +1,4 @@
 
-                    DIM version 19.20 Release Notes
+                    DIM version 19.21 Release Notes
 
 Notes 1 and 2 for Unix Users only
@@ -17,5 +17,11 @@
 		Dns </dev/null >& dns.log &
 
-NOTE 3: The Version Number service provided by servers is now set to 1920.
+NOTE 3: The Version Number service provided by servers is now set to 1921.
+
+31/05/2011
+Changes for version 19.21:
+    - Fixed a bug in DimRpcInfo: the timer for the timeout was started too late and sometimes the
+      RPC data was received in the meantime, so the timer was never stopped. 
+
 
 04/05/2011
Index: /trunk/FACT++/dim/dim/dim.h
===================================================================
--- /trunk/FACT++/dim/dim/dim.h	(revision 11069)
+++ /trunk/FACT++/dim/dim/dim.h	(revision 11070)
@@ -14,5 +14,5 @@
 #include "dim_common.h"
 
-#define DIM_VERSION_NUMBER 1920
+#define DIM_VERSION_NUMBER 1921
 
 #define MY_LITTLE_ENDIAN	0x1
Index: /trunk/FACT++/dim/src/diccpp.cxx
===================================================================
--- /trunk/FACT++/dim/src/diccpp.cxx	(revision 11069)
+++ /trunk/FACT++/dim/src/diccpp.cxx	(revision 11070)
@@ -452,4 +452,6 @@
 	{
 		t->stop();
+//dim_print_date_time();
+//printf("DIM RPC: Stopped Timer, Data Received for %s\n", t->getName());
 		if(DimClient::getNoDataCopy() == 0)
 			memcpy(t->itsData, buf, size);
@@ -504,4 +506,6 @@
 			itsData = buf;
 		itsSize = size;
+//dim_print_date_time();
+//printf("DIM RPC: Timer fired, No Data Received for %s\n", itsName);
 		wakeUp = 1;
 		if(itsInit)
@@ -618,10 +622,19 @@
 		dim_wait();
 	itsWaiting = 1;
+	if(itsTimeout)
+		start(itsTimeout);
+//dim_print_date_time();
+//printf("DIM RPC: Started Timer for %s - %d secs\n", itsName, itsTimeout);
 	ret = DimClient::sendCommand(itsNameOut, itsDataOut, size); 
 	if(!ret)
 	{
+		if(itsTimeout)
+			stop();
+//dim_print_date_time();
+//printf("DIM RPC: Stopped Timer, Command failed for %s\n", itsName);
 //		rpc_user_routine((int *)&itsTagId, itsNolinkBuf, &itsNolinkSize);
 		rpc_user_routine((long *)&itsHandler, itsNolinkBuf, &itsNolinkSize);
 	}
+/*
 	else
 	{
@@ -629,4 +642,5 @@
 			start(itsTimeout);
 	}
+*/
 }
 
@@ -655,4 +669,6 @@
 //	if(itsTagId)
 //		id_free(itsTagId, SRC_DIC);
+//dim_print_date_time();
+//printf("DIM RPC: Deleting RPC and Timer for %s\n", itsName);
 	if(itsId)
 		dic_release_service(itsId);
Index: /trunk/FACT++/dim/src/examples/rpc_client.cxx
===================================================================
--- /trunk/FACT++/dim/src/examples/rpc_client.cxx	(revision 11069)
+++ /trunk/FACT++/dim/src/examples/rpc_client.cxx	(revision 11070)
@@ -87,7 +87,7 @@
 
 	dim_init();
-	DimClient::setNoDataCopy();
+//	DimClient::setNoDataCopy();
 
-	for(i = 0; i < 10; i++)
+	for(i = 0; i < 1; i++)
 	{
 		dim_start_thread(do_work,(void *)i);
