Author Topic: Aborting compilation seems to be broken  (Read 34813 times)

mdelfede

  • Guest
Re: Aborting compilation seems to be broken
« Reply #15 on: August 03, 2006, 12:22:07 pm »
... if we stop adding any more stdout data to the log window after the user has hit "abort"? ...

extension :

1st press of Abort button:  disable output logging

if the Abort button is pressed subsequently later on (let's say more than 2 times in one second) :  kill the process

What about another alertbox asking if you REALLY want to kill the process, and only on windoze compilations ?
So, for example, stop the log output at first, then prompt an alertbox asking if you want to kill the process too, with little explanation of risks.
Another possibility would be to put what to do in environment options, so user can choose if he wants the normal behaviour, the 'stop output' behaviour or the 'kill it' one.

Ciao

Max

Offline mandrav

  • Project Leader
  • Administrator
  • Lives here!
  • *****
  • Posts: 4315
    • Code::Blocks IDE
Re: Aborting compilation seems to be broken
« Reply #16 on: August 03, 2006, 12:41:47 pm »
This conversation is pointless.
What's slow, is the error messages that are regex-parsed and scrolling fast. Thomas' patch disables them, so abort time will be instant in most cases.

We won't add "Just Another Configuration Option" just for the heck of it. It just doesn't make sense...
« Last Edit: August 03, 2006, 12:44:17 pm by mandrav »
Be patient!
This bug will be fixed soon...

Offline tiwag

  • Developer
  • Lives here!
  • *****
  • Posts: 1196
  • sailing away ...
    • tiwag.cb
Re: Aborting compilation seems to be broken
« Reply #17 on: August 03, 2006, 12:45:10 pm »
Hi thomas,
it makes the following difference

with CB rev_2801 i had to wait until all warnings got catched ... 8 minutes !!!
Code
-------------- Build: Debug in wx_console ---------------
mingw32-g++.exe -W -pipe -mthreads -include wx_pch.h -D__GNUWIN32__ -D__WXMSW__ -DWXUSINGDLL -DwxUSE_UNICODE -DUSE_PCH -g  -Id:\wx263\include -Id:\wx263\lib\gcc_dll\mswu -Id:\wx263\contrib\include -ID:\MinGW\include  -c wx_pch.h -o wx_pch.h.gch\Debug_wx_pch.h.gch
In file included from d:/wx263/include/wx/string.h:55,
                 from d:/wx263/include/wx/memory.h:20,
                 from d:/wx263/include/wx/object.h:25,
                 from d:/wx263/include/wx/wx.h:16,
                 from d:/wx263/include/wx/wxprec.h:54,
                 from ./wx_pch.h:9,
                 from <command line>:7:
d:/wx263/include/wx/buffer.h:96: warning: inline function 'wxCharBuffer::wxCharBuffer(const char*)' is declared as dllimport: attribute ignored.
d:/wx263/include/wx/buffer.h:96: warning: inline function 'wxCharBuffer::wxCharBuffer(const char*)' is declared as dllimport: attribute ignored.
...
Process terminated with status 0 (8 minutes, 12 seconds)
0 errors, 4490 warnings



with your patch applied i got  39 sec. ....  much better !!!!
Code
-------------- Build: Debug in wx_console ---------------
mingw32-g++.exe -W -pipe -mthreads -include wx_pch.h -D__GNUWIN32__ -D__WXMSW__ -DWXUSINGDLL -DwxUSE_UNICODE -DUSE_PCH -g  -Id:\wx263\include -Id:\wx263\lib\gcc_dll\mswu -Id:\wx263\contrib\include -ID:\MinGW\include  -c wx_pch.h -o wx_pch.h.gch\Debug_wx_pch.h.gch
In file included from d:/wx263/include/wx/string.h:55,
                 from d:/wx263/include/wx/memory.h:20,
                 from d:/wx263/include/wx/object.h:25,
                 from d:/wx263/include/wx/wx.h:16,
                 from d:/wx263/include/wx/wxprec.h:54,
                 from ./wx_pch.h:9,
                 from <command line>:7:
d:/wx263/include/wx/buffer.h:96: warning: inline function 'wxCharBuffer::wxCharBuffer(const char*)' is declared as dllimport: attribute ignored.
d:/wx263/include/wx/buffer.h:96: warning: inline function 'wxCharBuffer::wxCharBuffer(const char*)' is declared as dllimport: attribute ignored.
...
Aborting process 0...
Process terminated with status 0 (0 minutes, 39 seconds)
0 errors, 436 warnings


thanks thomas, fine improvement !


Offline mandrav

  • Project Leader
  • Administrator
  • Lives here!
  • *****
  • Posts: 4315
    • Code::Blocks IDE
Re: Aborting compilation seems to be broken
« Reply #18 on: August 03, 2006, 12:53:16 pm »
tiwag, you could also add the -Wfatal-errors which will stop on the very first error.
Be patient!
This bug will be fixed soon...

Offline tiwag

  • Developer
  • Lives here!
  • *****
  • Posts: 1196
  • sailing away ...
    • tiwag.cb
Re: Aborting compilation seems to be broken
« Reply #19 on: August 03, 2006, 01:00:04 pm »
tiwag, you could also add the -Wfatal-errors which will stop on the very first error.
i know this,

the reason why i posted all that stuff was,
that when you erroneously started a compilation with the wrong options,
you had to wait long (in my case 8 minutes) without possibility to abort the process.
this is now corrected with thomas' patch

thanks all
tiwag

Offline thomas

  • Administrator
  • Lives here!
  • *****
  • Posts: 3979
Re: Aborting compilation seems to be broken
« Reply #20 on: August 03, 2006, 01:01:23 pm »
Never mind that patch... I've modified the PipedProcess class to suck everything proper, this avoids all the data being piped through the message queue again (committed already). This should now be at least twice as fast.
"We should forget about small efficiencies, say about 97% of the time: Premature quotation is the root of public humiliation."

Offline tiwag

  • Developer
  • Lives here!
  • *****
  • Posts: 1196
  • sailing away ...
    • tiwag.cb
Re: Aborting compilation seems to be broken
« Reply #21 on: August 03, 2006, 02:04:35 pm »
one little "cosmetic" change would be fine ...

we should display the "Aborting process ..." before discarding all further messages from the pipeline,
so that the user knows that the Abort-button is processed actually.


Code
Be patient!
This process will be aborted soon...
« Last Edit: August 03, 2006, 02:06:18 pm by tiwag »

Offline tiwag

  • Developer
  • Lives here!
  • *****
  • Posts: 1196
  • sailing away ...
    • tiwag.cb
Re: Aborting compilation seems to be broken
« Reply #22 on: August 03, 2006, 04:02:32 pm »
under windoze, the
Code
wxProcess::Kill(m_Pid[i], wxSIGTERM);
obviously does nothing and does not return, until the signalled process finishes normally.

Therefore it is necessary under windoze, to send the Buildlog message before wxProcess::Kill() is called.

i did a test with the following patch and it works under windoze ok.

plugins\compilergcc\compilergcc.cpp:2273...

Code
int CompilerGCC::KillProcess()
{
    ResetBuildState();
    m_RunAfterCompile = false;
    if (!IsProcessRunning())
        return 0;
    wxKillError ret = wxKILL_OK;

    m_CommandQueue.Clear();

    for (size_t i = 0; i < m_ParallelProcessCount; ++i)
    {
        if (!m_Processes[i])
            continue;

    #ifdef __WXMSW__
        Manager::Get()->GetMessageManager()->Log(m_PageIndex, _("Aborting process %d ... Be patient!"), i);
    #endif // __WXMSW__

        // Close input pipe
        m_Processes[i]->CloseOutput();
        ((PipedProcess*) m_Processes[i])->ForfeitStreams();

        ret = wxProcess::Kill(m_Pid[i], wxSIGTERM);

    #ifndef __WXMSW__
        if(ret != wxKILL_OK)
        {
            // No need to tell the user about the errors - just keep him waiting.
            Manager::Get()->GetMessageManager()->Log(m_PageIndex, _("Aborting process %d ..."), i);
        }
        else switch (ret)
        {
//            case wxKILL_ACCESS_DENIED: cbMessageBox(_("Access denied")); break;
//            case wxKILL_NO_PROCESS: cbMessageBox(_("No process")); break;
//            case wxKILL_BAD_SIGNAL: cbMessageBox(_("Bad signal")); break;
//            case wxKILL_ERROR: cbMessageBox(_("Unspecified error")); break;
            case wxKILL_OK:
            default: break;//Manager::Get()->GetMessageManager()->Log(m_PageIndex, _("Process killed..."));
        }
    #endif // __WXMSW__
    }
    return ret;
}


how does this work under linux ?
is the linux case necessary or could it be thrown completely ?
and maybe simplified to

Code
int CompilerGCC::KillProcess()
{
    ResetBuildState();
    m_RunAfterCompile = false;
    if (!IsProcessRunning())
        return 0;
    wxKillError ret = wxKILL_OK;

    m_CommandQueue.Clear();

    for (size_t i = 0; i < m_ParallelProcessCount; ++i)
    {
        if (!m_Processes[i])
            continue;

    #ifdef __WXMSW__
        Manager::Get()->GetMessageManager()->Log(m_PageIndex, _("Aborting process %d ... Be patient!"), i);
    #else
        Manager::Get()->GetMessageManager()->Log(m_PageIndex, _("Aborting process %d ..."), i);
    #endif // __WXMSW__

        // Close input pipe
        m_Processes[i]->CloseOutput();
        ((PipedProcess*) m_Processes[i])->ForfeitStreams();

        ret = wxProcess::Kill(m_Pid[i], wxSIGTERM);
    }
    return ret;
}

« Last Edit: August 03, 2006, 04:08:53 pm by tiwag »

Offline tiwag

  • Developer
  • Lives here!
  • *****
  • Posts: 1196
  • sailing away ...
    • tiwag.cb
Re: Aborting compilation seems to be broken
« Reply #23 on: August 17, 2006, 12:57:54 pm »
@Yiannis & Pecan - any comments ?

the actual svn version needs to be updated anyways,
because actually there is no message displayed when one presses the Abort button
and then it can take a long while under windoze OS until gcc returns ... ... zzz ... ... zz ... ... z ... ...

i tested the above versions with windows and it works ok there,
i'm not shure with linux and MAC OS X ...
« Last Edit: August 17, 2006, 01:00:39 pm by tiwag »

Offline mandrav

  • Project Leader
  • Administrator
  • Lives here!
  • *****
  • Posts: 4315
    • Code::Blocks IDE
Re: Aborting compilation seems to be broken
« Reply #24 on: August 17, 2006, 01:21:31 pm »
Forgot about this. I 'll run some tests and if it works ok...
Be patient!
This bug will be fixed soon...

Offline Pecan

  • Plugin developer
  • Lives here!
  • ****
  • Posts: 2775
Re: Aborting compilation seems to be broken
« Reply #25 on: August 17, 2006, 01:49:29 pm »
I'll have to test next week. I'm currently too far away from my MAC box.