Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

TAO Corba client crash

Posted on 2011-02-15
4
Medium Priority
?
610 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

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article will inform Clients about common and important expectations from the freelancers (Experts) who are looking at your Gig.
Today, the web development industry is booming, and many people consider it to be their vocation. The question you may be asking yourself is – how do I become a web developer?
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.
Loops Section Overview

773 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