Ignore:
Timestamp:
Aug 3, 2009, 2:29:12 PM (15 years ago)
Author:
Christoph Mayer
Message:

maemo segfault wegen static object ctors workaround

Location:
source/ariba/communication
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • source/ariba/communication/BaseCommunication.cpp

    r5618 r5624  
    244244        } else {
    245245                LinkDescriptor& linkDesc = queryLocalLink(link);
    246                 if (linkDesc.isUnspecified()) return EndpointDescriptor::UNSPECIFIED;
     246                if (linkDesc.isUnspecified()) return EndpointDescriptor::UNSPECIFIED();
    247247                return linkDesc.remoteEndpoint;
    248248        }
     
    534534                if (linkSet[i]->localLink == link) return (LinkDescriptor&)*linkSet[i];
    535535
    536         LinkDescriptor ret;
    537         ret.unspecified = true;
    538         return ret;
     536        return LinkDescriptor::UNSPECIFIED();
    539537}
    540538
     
    544542                if (linkSet[i]->remoteLink == link) return (LinkDescriptor&)*linkSet[i];
    545543
    546         LinkDescriptor ret;
    547         ret.unspecified = true;
    548         return ret;
     544        return LinkDescriptor::UNSPECIFIED();
    549545}
    550546
  • source/ariba/communication/BaseCommunication.h

    r5614 r5624  
    234234                        localLink(LinkID::UNSPECIFIED), localLocator(NULL),
    235235                        remoteLink(LinkID::UNSPECIFIED), remoteLocator(NULL),
    236                         remoteEndpoint(EndpointDescriptor::UNSPECIFIED), up(false), unspecified(false) {
     236                        up(false) {
    237237                }
    238238
     
    243243
    244244                bool isUnspecified() const {
    245                         return unspecified;
     245                        return (this == &UNSPECIFIED());
     246                }
     247
     248                static LinkDescriptor& UNSPECIFIED(){
     249                        static LinkDescriptor* unspec = NULL;
     250                        if(unspec == NULL) unspec = new LinkDescriptor();
     251                        return *unspec;
    246252                }
    247253
  • source/ariba/communication/EndpointDescriptor.cpp

    r5508 r5624  
    4242namespace communication {
    4343
    44 const EndpointDescriptor EndpointDescriptor::UNSPECIFIED;
    4544vsznDefault(EndpointDescriptor);
    4645
    47 EndpointDescriptor::EndpointDescriptor() {
     46EndpointDescriptor::EndpointDescriptor(){
    4847}
    4948
    50 EndpointDescriptor::~EndpointDescriptor() {
     49EndpointDescriptor::~EndpointDescriptor(){
    5150
    5251}
    5352
    5453EndpointDescriptor::EndpointDescriptor(const EndpointDescriptor& rh) :
    55         endpoints(rh.endpoints) {
     54        endpoints(rh.endpoints){
    5655}
    5756
    5857EndpointDescriptor::EndpointDescriptor(const endpoint_set& endpoints ) :
    59         endpoints(endpoints) {
     58        endpoints(endpoints){
    6059}
    6160
    62 EndpointDescriptor::EndpointDescriptor(const string& str) : endpoints(str) {
     61EndpointDescriptor::EndpointDescriptor(const string& str) : endpoints(str){
    6362}
    6463
  • source/ariba/communication/EndpointDescriptor.h

    r5502 r5624  
    5656
    5757public:
    58         /// the unspecified endpoint descriptor
    59         static const EndpointDescriptor UNSPECIFIED;
    60 
    6158        /// creates an empty endpoint descriptor with zero endpoints
    6259        EndpointDescriptor();
     
    7976        }
    8077
     78        static EndpointDescriptor& UNSPECIFIED() {
     79                static EndpointDescriptor* unspec = NULL;
     80                if(unspec == NULL) unspec = new EndpointDescriptor();
     81
     82                return *unspec;
     83        }
     84
    8185        /// returns true, if this object is the unspecified object
    8286        bool isUnspecified() const {
    83                 return this == &UNSPECIFIED;
     87                return (this == &UNSPECIFIED());
    8488        }
    8589
Note: See TracChangeset for help on using the changeset viewer.