[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference turris::c_plus_plus

Title:C++
Notice:Read 1.* and use keywords (e.g. SHOW KEY/FULL KIT_CXX_VAX_VMS)
Moderator:DECCXX::AMARTIN
Created:Fri Nov 06 1987
Last Modified:Thu Jun 05 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:3604
Total number of notes:18242

3414.0. "Need help pthread ." by HGOVC::SIUKEUNGLEE () Tue Jan 28 1997 10:50

    
       <<< TURRIS::DISK$NOTES_PACK2:[NOTES$LIBRARY]DIGITAL_UNIX.NOTE;1 >>>
                -< DIGITAL UNIX (FORMERLY KNOWN AS DEC OSF/1) >-
================================================================================
Note 8607.0                Need on on pthread library.                No replies
HGOVC::SIUKEUNGLEE                                  162 lines  28-JAN-1997 01:41
--------------------------------------------------------------------------------
Hi,
    
    Customer report some problem when there program link with pthread
    library. The program will crash and core file generated. Could someone
    help me to take a look of the problem  ?
    
    
    # ./test
    Data Address:0x14000d7c0
    Entry Address:0x140024440
    Entry Address:0x140024280
    Key"12345"found,Entry Address:0x140024440
            Data=hello
    Key"abcde"found,Entry Address:0x140024280
    CDummy data:999
    DECthreads Last Chance handler: thread 2 exiting on status exception
    0x177db005
    Exception: Invalid memory address (dce / thd)
    Resources lost(coredump)
    
    # decladebug ./test ./core
    Welcome to the Ladebug Debugger Version 4.0-25
    ------------------ 
    object file name: ./test 
    core file name: ./core
    Reading symbolic information ...done
    Core file produced from executable test
    Thread 0x2 terminated at PC 0x3ff8053eab0 by signal IOT
    (ladebug) t
    >0  0x3ff8053eab0 in nxm_thread_kill(0x3ffc0081e10, 0x3ffc0080338, 0x2,
    0x3ffc0080310, 0x2, 0x0) DebugInformationStrippedFromFile19:???
    #1  0x3ff8056f1dc in pthread_kill(0x3ffc0082590, 0x140018030,
    0x2130455, 0x3ff8055beb8, 0x0, 0x14002fe78)
    DebugInformationStrippedFromFile100:???
    #2  0x3ff80575b8c in UnknownProcedure10FromFile104(0x2130455,
    0x3ff8055beb8, 0x0, 0x14002fe78, 0x3ff8010fb24, 0x3ffc0080c50)
    DebugInformationStrippedFromFile104:???
    #3  0x3ff8010fb20 in /usr/shlib/libc.so
    #4  0x3ff80159f70 in raise(0x3ff8010fb24, 0x3ffc0080c50, 0x3ff80159f74,
    0x3ff80575ab8, 0x3ff80170aac, 0x0)
    DebugInformationStrippedFromFile441:???
    #5  0x3ff80170aa8 in abort(0x14002f438, 0x0, 0x0, 0x0,
    0xffffffff00000000, 0x177db005) DebugInformationStrippedFromFile329:???
    #6  0x3ff80565c74 in errAbort(0x0, 0x0, 0xffffffff00000000, 0x177db005,
    0x3ff8056650c, 0x3ffc00802a0) DebugInformationStrippedFromFile90:???
    #7  0x3ff80566508 in UnknownProcedure2FromFile91(0x14002f6f8,
    0x3ff805669d4, 0x14002f9d8, 0x3ff8055beb8, 0x14002fa80, 0x3ff807b3488)
    DebugInformationStrippedFromFile91:???
    #8  0x3ff807b220c in UnknownProcedure4FromFile1(0x3ff807b3624, 0x0,
    0x14002f6f8, 0x3ff80574930, 0x14002fa48, 0x3ff805669d4)
    DebugInformationStrippedFromFile1:???
    #9  0x3ff807b3620 in UnknownProcedure16FromFile1(0x0, 0x14002fe78,
    0x14002fe78, 0x14002ef18, 0xabadabad00beed00, 0x0)
    DebugInformationStrippedFromFile1:???
    #10 0x3ff807b3664 in exc_unwind(0x14002fe78, 0x14002ef18,
    0xabadabad00beed00, 0x0, 0x3ff807b254c, 0x35)
    DebugInformationStrippedFromFile1:???
    #11 0x3ff807b2548 in exc_raise_exception(0x120001a50, 0x0, 0x14002f9d8,
    0x0, 0x120002138, 0x120002214) DebugInformationStrippedFromFile1:???
    #12 0x3ff805669d4 in pthread_exc_raise_np(0x0, 0x0, 0x3ff80574718,
    0x120002214, 0x0, 0x0) DebugInformationStrippedFromFile91:???
    #13 0x3ff80574930 in thdBase(0x0, 0x0, 0x0, 0x0, 0x45586732, 0x3)
    DebugInformationStrippedFromFile102:???
    
    
    
    The test program are attached follow.
    
    Welcome any suggestion !
    
    David Lee.
    
    [ Cross posted to Digital UNIX note conference ]
        
    =========================================================================
    
    Digital UNIX 4.0b with all latest patches installed.
    DCE for UNIX 2.0a
    
    
#include <cxx/iostream.hxx>
#include <search.h>
#include <stdlib.h>
#include <pthread.h>

class CDummy
{
public:

	CDummy(int val){data = val;}
	print() { cout<< "CDummy data:"<<dec<<data<<endl;}

private:
	int data;
};

void InsertTab(char*key,void*data)
{
	ENTRY cell;
	cell.key = new char[10];
	strcpy(cell.key,key);

	cell.data=(char*)data;

	ENTRY*item;
	if((item = hsearch(cell,ENTER))==NULL){
		cout <<"Hash table full";
		exit;
	}

else
	cout<<"Entry Address:"<<hex<<item<<endl;
}

void* SearchTab(char* key)
{
	ENTRY* item;
	ENTRY s={key};

	if((item = hsearch(s,FIND))==NULL)
		cout<<"Entry not Found!!"<<endl; 
	else
		cout<<"Key\""<<key<<"\"found,Entry Address:"<<hex<<item<<endl;
		return item->data;
}

void* sos(void* param)
{
	char* a=(char*)SearchTab("12345");
	cout<<"\tData="<<a<<endl;

	((CDummy*)SearchTab("abcde"))->print();
	return NULL;
}

void main(void)
{
	if(hcreate(100)==0)
	cout<<"error creating hash table";

	char* data = new char[10];
	cout<<"Data Address:"<<hex<<(ulong*)data<<endl;
	strcpy(data,"hello");

	CDummy *theDummy = new CDummy(999);

	InsertTab("12345",data);
	InsertTab("abcde",theDummy);

	char* a=(char*)SearchTab("12345");
	cout<<"\tData="<<a<<endl;

	((CDummy*)SearchTab("abcde"))->print();
	
	pthread_t m_thread;

	pthread_create(&m_thread,
		       NULL,
			sos,
		       NULL);

	pthread_join(m_thread,NULL);
}

T.RTitleUserPersonal
Name
DateLines
3414.1Try the threads notesfile: CLT::CMAWIDTH::MDAVISMark Davis - compiler maniacTue Jan 28 1997 11:3015
1. try running under the debugger so the debugger can catch the
memory problem, then do a backtrace.  The backtrace you give is
after the threads library has caught the segfault, looked around
to see what to do, and then called pthread_kill.

2. since you don't give the compile or link command, no one can
try helping.

3. most people don't have dce, either.

4. and it doesn't look like a compiler problem, so we don't have spare
cycles to spend debugging your customer's problem.

5. xref to c_plus_plus # 3352 for a previous, non-threaded version
that failed due to dce problems.....
3414.2possible problem iin the hash table library routines...DECC::J_WARDTue Jan 28 1997 13:4912
I don't think the hash table functions you are using
are thread-safe. I see on the man page that Digital
used to have reentrant versions (hcreate_r(), hsearch_r(),
etc.) but that they are currently only supported for backward
compatibility.

When talking about the non-reentrant functions it says:

"  If several threads want to use the same hash table, they must perform their
  own synchronization. "