]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/ipc/server.cpp
prevent infinite loop if gtk_menu_popup() fails, fixes #15387
[wxWidgets.git] / samples / ipc / server.cpp
index afe890aacf80977ba0834e5befd6217a725a4a39..5c34fdcb61ed59f897159b5e576b20f3d7989da0 100644 (file)
@@ -4,7 +4,6 @@
 // Author:      Julian Smart
 // Modified by: Jurgen Doornik
 // Created:     25/01/99
-// RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
@@ -32,7 +31,7 @@
 // we're using TCP/IP or real DDE.
 #include "ipcsetup.h"
 
-#if !defined(__WXMSW__) && !defined(__WXPM__)
+#ifndef wxHAS_IMAGES_IN_RESOURCES
     #include "../sample.xpm"
 #endif
 
@@ -160,11 +159,7 @@ void MyFrame::UpdateUI()
 
 void MyFrame::OnClose(wxCloseEvent& event)
 {
-    if (m_server)
-    {
-        delete m_server;
-        m_server = NULL;
-    }
+    wxDELETE(m_server);
     event.Skip();
 }
 
@@ -185,8 +180,7 @@ void MyFrame::OnStart(wxCommandEvent& WXUNUSED(event))
     else
     {
         wxLogMessage("Server %s failed to start", servername);
-        delete m_server;
-        m_server = NULL;
+        wxDELETE(m_server);
     }
     UpdateUI();
 }
@@ -262,8 +256,7 @@ void MyServer::Disconnect()
 {
     if ( m_connection )
     {
-        delete m_connection;
-        m_connection = NULL;
+        wxDELETE(m_connection);
         wxGetApp().GetFrame()->UpdateUI();
         wxLogMessage("Disconnected client");
     }
@@ -324,25 +317,26 @@ MyConnection::OnRequest(const wxString& topic,
 {
     *size = 0;
 
-    wxString afterDate;
+    wxString s,
+             afterDate;
     if ( item.StartsWith("Date", &afterDate) )
     {
         const wxDateTime now = wxDateTime::Now();
 
         if ( afterDate.empty() )
         {
-            m_requestData = now.Format();
+            s = now.Format();
             *size = wxNO_LEN;
         }
         else if ( afterDate == "+len" )
         {
-            m_requestData = now.FormatTime() + " " + now.FormatDate();
-            *size = strlen(m_requestData.mb_str()) + 1;
+            s = now.FormatTime() + " " + now.FormatDate();
+            *size = strlen(s.mb_str()) + 1;
         }
     }
     else if ( item == "bytes[3]" )
     {
-        m_requestData = "123";
+        s = "123";
         *size = 3;
     }
 
@@ -352,7 +346,10 @@ MyConnection::OnRequest(const wxString& topic,
         return NULL;
     }
 
-    const void * const data = m_requestData.mb_str();
+    // store the data pointer to which we return in a member variable to ensure
+    // that the pointer remains valid even after we return
+    m_requestData = s.mb_str();
+    const void * const data = m_requestData;
     Log("OnRequest", topic, item, data, *size, format);
     return data;
 }