You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by pr...@apache.org on 2005/06/06 18:10:38 UTC

cvs commit: ws-axis/c/tests/auto_build/testcases/dynamic/Combo_TTest Combo_TTestClient.cpp

prestonf    2005/06/06 09:10:38

  Modified:    c/tests/auto_build/testcases/dynamic/Combo_TTest
                        Combo_TTestClient.cpp
  Log:
  Hi All,
  This is an attempt to cure the threading test problem that this test produces (fails on AIX with 'Catastrophe in realloc: invalid storage pointer' and on Win2000 with an 'Unknown exception occured').
  
  Revision  Changes    Path
  1.3       +199 -113  ws-axis/c/tests/auto_build/testcases/dynamic/Combo_TTest/Combo_TTestClient.cpp
  
  Index: Combo_TTestClient.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/tests/auto_build/testcases/dynamic/Combo_TTest/Combo_TTestClient.cpp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Combo_TTestClient.cpp	23 Mar 2005 15:45:08 -0000	1.2
  +++ Combo_TTestClient.cpp	6 Jun 2005 16:10:38 -0000	1.3
  @@ -43,8 +43,9 @@
   
   //#define MACRO_NUM_THREADS 10
   //int NUM_THREADS = MACRO_NUM_THREADS;
  -#define NUM_THREADS 10
  -#define ARRAYSIZE 2
  +#define NUM_THREADS		4
  +#define ARRAYSIZE		2
  +#define ARRAYSIZE_STT	100
   
   
   /* In windows the entry point function return type is DWORD WINAPI
  @@ -73,6 +74,8 @@
           }
           catch(exception& e)
           {
  +			e = e;
  +
               cout << "Unknown exception has occured" << endl;
           }
           catch(...)
  @@ -87,49 +90,88 @@
   
   
   
  -RETTYPE arrayDocThreadFunc(ARGTYPE Param)
  +RETTYPE arrayDocThreadFunc( ARGTYPE Param)
   {
  -        /*Type casting the url to char * */
  -        char *p=(char *)Param;
  -        char endpoint[256];
  -		int x;
  -        const char* url="http://localhost:9060/SimpleArray/services/arrayTest";
  -		if(p!=NULL)
  -             url=p;
  -        try
  -        {
  -				sprintf(endpoint, "%s", url);
  -				ArrayTestPortType ws(endpoint);
  -				//testing echoIntArray
  -				IntArrayType arrin;
  -				arrin.intItem.m_Array = new int*[ARRAYSIZE];
  -				int * intArray = new int[ARRAYSIZE];
  -				arrin.intItem.m_Size = ARRAYSIZE;
  -				for (x=0;x<ARRAYSIZE;x++)
  -				{
  -					intArray[x] = x;
  -					arrin.intItem.m_Array[x] = &intArray[x];
  -				}
  -				if (ws.echoIntArray(&arrin)->intItem.m_Array != NULL)
  -					cout << "successful ";
  -				else
  -					cout << "failed "<<endl;		
  -		}catch(AxisException& e)
  -        {
  -            cout << "Exception : " << e.what() << endl;
  -        }
  -        catch(exception& e)
  -        {
  -            cout << "Unknown exception has occured" << endl;
  -        }
  -        catch(...)
  -        {
  -            cout << "Unknown exception has occured" << endl;
  -        }
  -                #ifndef WIN32
  -                        pthread_exit(0);
  -                #endif
  -        return 0;
  +	/*Type casting the url to char * */
  +	char *			p = (char *) Param;
  +	char			endpoint[256];
  +	int				x;
  +	const char *	url = "http://localhost:9060/SimpleArray/services/arrayTest";
  +
  +	if( p != NULL)
  +	{
  +		url = p;
  +	}
  +
  +	try
  +	{
  +		sprintf( endpoint, "%s", url);
  +
  +		ArrayTestPortType	ws( endpoint);
  +
  +		//testing echoIntArray
  +		IntArrayType	arrin;
  +
  +		arrin.intItem.m_Size = ARRAYSIZE;			 // Set the array size.
  +		arrin.intItem.m_Array = new int*[ARRAYSIZE]; // Create an array of integer pointers.
  +/*
  +		int * intArray = new int[ARRAYSIZE];		 // Create a pointer to an integer array.
  +
  +		// Fill the array with values from 0 to ARRAYSIZE and set the integer pointer to the
  +		// pointer of the integer array.
  +		for( x = 0; x < ARRAYSIZE; x++)
  +		{
  +			intArray[x] = x;
  +			arrin.intItem.m_Array[x] = &intArray[x];
  +		}
  +*/
  +
  +		// Fill the array with values from 0 to ARRAYSIZE and set the integer pointer to the
  +		// pointer of the integer array.
  +		for( int y = 0; y < ARRAYSIZE; y++)
  +		{
  +			int * intArray = new int[ARRAYSIZE];		 // Create a pointer to an integer array.
  +
  +			for( x = 0; x < ARRAYSIZE; x++)
  +			{
  +				intArray[x] = x;
  +			}
  +
  +			arrin.intItem.m_Array[y] = intArray;
  +		}
  +/**/
  +		if( ws.echoIntArray( &arrin)->intItem.m_Array != NULL)
  +		{
  +			cout << "successful ";
  +		}
  +		else
  +		{
  +			cout << "failed " << endl;
  +		}
  +
  +	}
  +	catch( AxisException& e)
  +	{
  +		e = e;
  +
  +		cout << "Exception : " << e.what() << endl;
  +	}
  +	catch( exception& e)
  +	{
  +		e = e;
  +
  +		cout << "Unknown exception has occured" << endl;
  +	}
  +	catch(...)
  +	{
  +		cout << "Unknown exception has occured" << endl;
  +	}
  +
  +	#ifndef WIN32
  +	pthread_exit( 0);
  +	#endif
  +
  +	return 0;
   }
   
   RETTYPE mathOpsThreadFunc(ARGTYPE Param)
  @@ -165,10 +207,14 @@
   				}
           }catch(AxisException& e)
           {
  +		e = e;
  +
               cout << "Exception : " << e.what() << endl;
           }
           catch(exception& e)
           {
  +		e = e;
  +
               cout << "Unknown exception has occured" << endl;
           }
           catch(...)
  @@ -184,58 +230,77 @@
   
   RETTYPE simpleTypeThreadFunc(ARGTYPE Param)
   {
  -        /*Type casting the url to char * */
  -        char *p=(char *)Param;
  -        char endpoint[256];
  -        const char* url="http://localhost:9060/SimpleTypeArray/services/sampleWS";
  -        if(p!=NULL)
  -             url=p;
  -          SimpleTypeArrayWS *ws;
  -        try
  -        {
  -                sprintf(endpoint, "%s", url);
  -                ws=new SimpleTypeArrayWS(endpoint, APTHTTP1_1);
  -                Type *input;
  -				Type *output;
  -				xsd__int_Array array_input;
  -				int entries[100];
  -				int i;
  -
  -				array_input.m_Array = new int*[100];
  -				array_input.m_Size  = 100;
  -
  -				 for ( i = 0; i < 100; i++ ) {
  -					entries[i] = i;
  -				 array_input.m_Array[i] = &entries[i];
  -				}
  +	/*Type casting the url to char * */
  +	char *			p = (char *) Param;
  +	char			endpoint[256];
  +	const char *	url = "http://localhost:9060/SimpleTypeArray/services/sampleWS";
   
  -				 input = new Type();
  -				input->item = array_input;
  +	if( p != NULL)
  +	{
  +		url = p;
  +	}
   
  -			
  +	SimpleTypeArrayWS *	ws;
   
  -				output = ws->getInput(input);
  -				i=0;
  -				if(*(output->item.m_Array[i])== 0)
  -					cout << "successful ";				
  -				delete ws;
  -        }
  -        catch(AxisException& e)
  -        {
  -            cout << "Exception : " << e.what() << endl;
  -        }
  -        catch(exception& e)
  -        {
  -            cout << "Unknown exception has occured" << endl;
  -        }
  -        catch(...)
  -        {
  -            cout << "Unknown exception has occured" << endl;
  -        }
  -                #ifndef WIN32
  -                        pthread_exit(0);
  -                #endif
  -        return 0;
  +	try
  +	{
  +		sprintf( endpoint, "%s", url);
  +
  +		ws = new SimpleTypeArrayWS( endpoint, APTHTTP1_1);
  +
  +		Type *			input;
  +		Type *			output;
  +		xsd__int_Array	array_input;
  +		int				i;
  +
  +		array_input.m_Array = new int*[ARRAYSIZE_STT];
  +		array_input.m_Size  = ARRAYSIZE_STT;
  +
  +		for( int j = 0; j < ARRAYSIZE_STT; j++)
  +		{
  +			int * piEntries = new int[ARRAYSIZE_STT];
  +
  +			for( i = 0; i < ARRAYSIZE_STT; i++)
  +			{
  +				piEntries[i] = i;
  +			}
  +
  +			array_input.m_Array[j] = piEntries;
  +		}
  +
  +		input = new Type();
  +		input->item = array_input;
  +
  +		output = ws->getInput( input);
  +
  +		i = 0;
  +
  +		if( *(output->item.m_Array[i]) == 0)
  +		{
  +			cout << "successful ";				
  +		}
  +
  +		delete ws;
  +	}
  +	catch( AxisException& e)
  +	{
  +		cout << "Exception : " << e.what() << endl;
  +	}
  +	catch(exception& e)
  +	{
  +		e = e;
  +		cout << "Unknown exception has occured" << endl;
  +	}
  +	catch(...)
  +	{
  +		cout << "Unknown exception has occured" << endl;
  +	}
  +
  +	#ifndef WIN32
  +	pthread_exit(0);
  +	#endif
  +
  +	return 0;
   }
   
   
  @@ -249,7 +314,7 @@
   		 /* Extracting endpoints for 4 stubs.*/				
   		
   		 if(argc>=7){
  -			 for(i=0;i<4;i++){
  +			 for(i=0;i<NUM_THREADS;i++){
   				char *temp=argv[3+i];
   				count=0;
   				endpoint_list[i]=new char[100];
  @@ -269,30 +334,51 @@
   		 }
   
   		 #ifdef WIN32
  -			/*Windows specific code comes here */
  +		/*Windows specific code comes here */
   		   
  -			HANDLE hThread[NUM_THREADS];
  -			DWORD dwThreadId;
  -			DWORD (_stdcall *fnptr[5])(LPVOID p)={calThreadFunc,arrayDocThreadFunc,mathOpsThreadFunc,simpleTypeThreadFunc};
  -			//char endpoint[50];
  -			for(i=0;i<NUM_THREADS;i++){				    
  -					hThread[i] = CreateThread(
  -											NULL,                        // no security attributes
  -											0,                           // use default stack size
  -											fnptr[i%4],                 // thread function
  -											LPVOID(endpoint_list[i%4]),             // argument to thread function
  -											0,   
  -										    &dwThreadId);              // returns the thread identifier
  +		HANDLE	hThread[NUM_THREADS] = { NULL, NULL, NULL, NULL};
  +		DWORD	dwThreadId;
  +		DWORD	(_stdcall *fnptr[NUM_THREADS]) (LPVOID p) = { calThreadFunc,
  +															  arrayDocThreadFunc,
  +															  mathOpsThreadFunc,
  +															  simpleTypeThreadFunc};
  +
  +		for( i = 0; i < NUM_THREADS; i++)
  +		{				    
  +			hThread[i] = CreateThread( NULL,						// no security attributes
  +									   0,							// use default stack size
  +									   fnptr[i],					// thread function
  +									   LPVOID( endpoint_list[i]),	// argument to thread function
  +									   0,   
  +									   &dwThreadId);				// returns the thread identifier
   					
  -			if (hThread[i] == NULL)
  +			if( hThread[i] == NULL)
   			{
  -			cout<<"Thread creation Failed";
  +				cout<<"Thread creation Failed";
   			}
  +		}
  +
  +		/* Waiting for threads to terminate */
  +		WaitForMultipleObjects( NUM_THREADS, hThread, true, INFINITE);
  +
  +		for( i = 0; i < NUM_THREADS; i++)
  +		{
  +			DWORD	dwExitCode;
  +
  +			GetExitCodeThread( hThread[i], &dwExitCode);
  +
  +			if( STILL_ACTIVE == dwExitCode)
  +			{
  +				cout<<"error - threads still active"<<endl;
   			}
  -			/* Waiting for threads to terminate */
  -			WaitForMultipleObjects(NUM_THREADS,hThread,true, INFINITE);
  -			for(i=0;i<NUM_THREADS;i++)
  -					CloseHandle( hThread[i] );
  +			else
  +			{
  +				if( hThread[i])
  +				{
  +					CloseHandle( hThread[i]);
  +				}
  +			}
  +		}
   
   		#else
   		    void *(*fnptr[5])(void * p)={calThreadFunc,arrayDocThreadFunc,mathOpsThreadFunc,simpleTypeThreadFunc};