Solved

TAO Corba client crash

Posted on 2011-02-15
4
588 Views
Last Modified: 2012-05-11
Hi,
I wrote a simple client/server based on the chat example in the tao/examples/simple/chat directory, using ACE-6.0.0 win32.
The client seems to run fine, but when main ends as it's running its destructors it crashes on an access violation at

Line 33 in leader_follower.cpp

  if ( this->orb_core_->gui_resource_factory () )
    this->orb_core_->gui_resource_factory ()->reclaim_reactor (this->reactor_);

I'm not sure if its relevant but my client access is done through a secondary class that's instantiated from a dll. So the orb init code resides in the dll too.
This is my basic initialization code in the dll:

        int argc;
        ACE_TCHAR** argv = CommandLineToArgvA(GetCommandLine(), &argc);
       
        orb_ = CORBA::ORB_init (argc, argv);
       
        // Open the file for reading.
        ACE_HANDLE f_handle = ACE_OS::open (ior_filename, 0);

        if (f_handle != ACE_INVALID_HANDLE) {

            ACE_Read_Buffer ior_buffer (f_handle);
            char *data = ior_buffer.read ();

            if (data != 0) {
                CORBA::Object_var server_object =
                    orb_->string_to_object (data);
                __symbols = Symbols::_narrow (server_object.in ());
                if (!CORBA::is_nil (__symbols.in ())) __order_sync_init_successful=true;
            }
            ior_buffer.alloc ()->free (data);
            ACE_OS::close (f_handle);
        }
       
and this is the final code:
        orb_ ->shutdown();
0
Comment
Question by:longtree
  • 2
  • 2
4 Comments
 
LVL 12

Expert Comment

by:trinitrotoluene
ID: 34930463
this shouldn't be too difficult to isolate since its in the destructor it most definitely is because something has already been released or invalidated or maybe not even initialized.

if you have access to a debugger place a breakpoint before the place where it is crashing and check which pointer is going NULL


otherwise do the following. check my code snippet below. I'm just checking for NULL so that you can isolate the problem further




[i] if ( this->orb_core_->gui_resource_factory () )
    this->orb_core_->gui_resource_factory ()->reclaim_reactor (this->reactor_);
[/i]

//modify your code as below to check for null

if(this){
if(this->core!=NULL){
if(this->orb_core_->gui_resource_factory () != NULL){
this->orb_core_->gui_resource_factory ()->reclaim_reactor (this->reactor_);
}
}
}

    
[/i]

Open in new window

0
 
LVL 12

Expert Comment

by:trinitrotoluene
ID: 34930469
ofcourse if you don't have a debugger then insert a few log statements to help you with the flow and the crash location
0
 

Accepted Solution

by:
longtree earned 0 total points
ID: 34930933
I figured it out. I declared the CORBA object as static and I guess at program termination it was being destroyed after the orb was. Solution was to switch
from a _var type to a _ptr type and then the destructor didn't do anything.
0
 

Author Closing Comment

by:longtree
ID: 34959281
I figured it out myself and that was the reason.
0

Featured Post

What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

A short article about a problem I had getting the GPS LocationListener working.
Whether you've completed a degree in computer sciences or you're a self-taught programmer, writing your first lines of code in the real world is always a challenge. Here are some of the most common pitfalls for new programmers.
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

705 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now