Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 41515 | Differences between
and this patch

Collapse All | Expand All

(-)kdenetwork-3.2.1/kget/slave.cpp (-26 / +44 lines)
Lines 63-70 Link Here
63
    mutex.lock();
63
    mutex.lock();
64
    stack.push(_cmd);
64
    stack.push(_cmd);
65
    nPendingCommand++;
65
    nPendingCommand++;
66
    worker.wakeOne();
67
    mutex.unlock();
66
    mutex.unlock();
67
    //worker.wakeOne(); after mutex.unlock(); seems better !?
68
    worker.wakeOne();
68
69
69
    mDebugOut << endl;
70
    mDebugOut << endl;
70
}
71
}
Lines 94-99 Link Here
94
}
95
}
95
96
96
97
98
// Soft Kill the copyjob 
99
// If You kill an already killed copyjob this cause : Kget get signal 11 and it terminates !!!
100
void Slave::softkilljob()
101
{
102
     if (copyjob)
103
         {
104
	   copyjob->kill(true);
105
	   copyjob = NULL;
106
	 }
107
}
97
108
98
void Slave::run()
109
void Slave::run()
99
{
110
{
Lines 109-115 Link Here
109
        switch (cmd = fetch_cmd()) 
120
        switch (cmd = fetch_cmd()) 
110
        {
121
        {
111
            case RESTART:
122
            case RESTART:
112
                copyjob->kill(true);
123
                //copyjob->kill(true);
124
		softkilljob();
113
                // fall through
125
                // fall through
114
            case RETR:
126
            case RETR:
115
                mDebug << " FETCHED COMMAND       RETR" << endl;
127
                mDebug << " FETCHED COMMAND       RETR" << endl;
Lines 122-172 Link Here
122
134
123
            case PAUSE:
135
            case PAUSE:
124
                mDebug << " FETCHED COMMAND       PAUSE" << endl;
136
                mDebug << " FETCHED COMMAND       PAUSE" << endl;
125
                copyjob->kill(true);
137
	// Here there was a BUG !
126
                copyjob = 0L;
138
	// You want kill an already killed copyjob !
139
	softkilljob();
140
                 //copyjob->kill(true);
141
                 //copyjob = 0L;
127
                PostMessage(SLV_PAUSED);
142
                PostMessage(SLV_PAUSED);
128
                break;
143
                break;
129
144
130
            case KILL:
145
            case KILL:
131
                mDebug << " FETCHED COMMAND      KILL" << endl;
146
                mDebug << " FETCHED COMMAND      KILL" << endl;
132
                running = false;
147
                running = false;
133
                if (copyjob)
148
	// Here there was an other BUG !
134
                {
149
	// You want to kill an already killed copyjob !
135
                copyjob->kill(true);
150
	softkilljob();
136
                copyjob = 0L;
137
                 }
138
                // no message posted
151
                // no message posted
139
                break;
152
                break;
140
            
153
            
141
            case REMOVE:
154
            case REMOVE:
142
                mDebug << " FETCHED COMMAND       REMOVE" << endl;
155
                mDebug << " FETCHED COMMAND       REMOVE" << endl;
143
                running = false;
156
                running = false;
144
                copyjob->kill(true);
157
	softkilljob();
145
                copyjob = 0L;
146
                PostMessage(SLV_REMOVED);
158
                PostMessage(SLV_REMOVED);
147
                break;
159
                break;
148
160
149
            case SCHEDULE:
161
            case SCHEDULE:
150
                mDebug << " FETCHED COMMAND       SCHEDULE" << endl;
162
                mDebug << " FETCHED COMMAND       SCHEDULE" << endl;
151
                copyjob->kill(true);
163
	softkilljob();
152
                copyjob = 0L;
153
                PostMessage(SLV_SCHEDULED);
164
                PostMessage(SLV_SCHEDULED);
154
                break;
165
                break;
155
166
156
            case DELAY:
167
            case DELAY:
157
                mDebug << " FETCHED COMMAND       DELAY" << endl;
168
                mDebug << " FETCHED COMMAND       DELAY" << endl;
158
                copyjob->kill(true);
169
	softkilljob();
159
                copyjob = 0L;
160
                PostMessage(SLV_DELAYED);
170
                PostMessage(SLV_DELAYED);
161
                break;
171
                break;
162
172
  
173
    //Soft Thread Termination 
174
    case SOFTTERM:
175
 	    
163
            case NOOP:
176
            case NOOP:
164
                mDebug << "FETCHED COMMAND        NOOP, i.e. empty stack" << endl;
177
                mDebug << "FETCHED COMMAND        NOOP, i.e. empty stack" << endl;
165
                if ( copyjob )
178
	softkilljob();
166
                {
167
                    copyjob->kill(true);
168
                    copyjob = 0L;
169
                }
170
                running = false;
179
                running = false;
171
                break;
180
                break;
172
181
Lines 177-183 Link Here
177
        }
186
        }
178
    }
187
    }
179
188
180
    copyjob = NULL;
189
    // not needed !?
190
    //copyjob = NULL;
181
    mDebugOut << endl;
191
    mDebugOut << endl;
182
}
192
}
183
193
Lines 238-250 Link Here
238
    mDebugIn << endl;
248
    mDebugIn << endl;
239
    if (job->error()) {
249
    if (job->error()) {
240
        InfoMessage(job->errorString());
250
        InfoMessage(job->errorString());
241
        terminate(); // AEEIIII!
251
	// DO NOT KILL a copyjob already finished ! This cause crash !
242
        wait();
252
	copyjob=NULL;
253
	Op(SOFTTERM);
254
	// NOT SAFE !!!
255
        //terminate(); // AEEIIII!
256
        //wait();
243
        PostMessage(SLV_DELAYED);
257
        PostMessage(SLV_DELAYED);
244
    } else
258
    } else
245
    {
259
    {
246
        terminate(); // AEEIIII!
260
        // DO NOT KILL a copyjob already finished ! This cause crash !
247
        wait();
261
	copyjob=NULL;
262
        Op(SOFTTERM);
263
	// NOT SAFE !!!
264
        //terminate(); // AEEIIII!
265
        //wait();
248
        PostMessage(SLV_FINISHED);
266
        PostMessage(SLV_FINISHED);
249
    }
267
    }
250
    mDebugOut << endl;
268
    mDebugOut << endl;
(-)kdenetwork-3.2.1/kget/slave.h (-1 / +4 lines)
Lines 50-56 Link Here
50
public:
50
public:
51
    enum SlaveCommand {
51
    enum SlaveCommand {
52
        RETR, PAUSE, RESTART, ABORT, DELAY,
52
        RETR, PAUSE, RESTART, ABORT, DELAY,
53
        SCHEDULE, REMOVE, KILL, NOOP
53
	//added SOFTTERM
54
        SCHEDULE, REMOVE, KILL, NOOP, SOFTTERM
54
    };
55
    };
55
56
56
    enum SlaveResult {
57
    enum SlaveResult {
Lines 78-83 Link Here
78
    void slotProcessedSize(KIO::Job *, KIO::filesize_t);
79
    void slotProcessedSize(KIO::Job *, KIO::filesize_t);
79
    void slotSpeed(KIO::Job *, unsigned long);
80
    void slotSpeed(KIO::Job *, unsigned long);
80
    void slotInfoMessage(KIO::Job *, const QString &);
81
    void slotInfoMessage(KIO::Job *, const QString &);
82
    // soft kill the copyjob 
83
    void softkilljob();
81
84
82
private:
85
private:
83
    void Connect();
86
    void Connect();
(-)kdenetwork-3.2.1/kget/transfer.cpp (-2 / +20 lines)
Lines 47-52 Link Here
47
#include <kio/passdlg.h>
47
#include <kio/passdlg.h>
48
#include <kio/global.h>
48
#include <kio/global.h>
49
#include <kio/netaccess.h>
49
#include <kio/netaccess.h>
50
// for usleep
51
#include <unistd.h>
50
52
51
53
52
extern Settings ksettings;
54
extern Settings ksettings;
Lines 160-178 Link Here
160
162
161
void Transfer::synchronousAbort()
163
void Transfer::synchronousAbort()
162
{
164
{
165
    int i=0;
166
    
163
    if ( m_pSlave )
167
    if ( m_pSlave )
164
    {
168
    {
165
        if ( m_pSlave->running() )
169
        while ( (m_pSlave->running()) && (i<10) )
166
        {
170
        {
171
	    // fprintf(stderr,"trying Soft Syncronous Abort ...\n");
167
            m_pSlave->Op(Slave::KILL);
172
            m_pSlave->Op(Slave::KILL);
168
            m_pSlave->wait();
173
	    // wait 100ms
174
	    usleep(100000);
175
	    // max 1 s
176
	    i++; 
177
	    //m_pSlave->wait();  !NOT SAFE!
169
        }
178
        }
170
179
171
        if ( m_pSlave->running() )
180
        if ( m_pSlave->running() )
181
	{ 
182
	    fprintf(stderr,"SyncronousAbort Soft failed ! This is not SAFE !!! --> Hard Kill !!!\n");
172
            m_pSlave->terminate();
183
            m_pSlave->terminate();
184
	    m_pSlave->wait();
185
	}
173
186
187
	if ( m_pSlave->running() )
188
	{
189
	    fprintf(stderr,"If this happen there is a BIG PROBLEM !!!\n");
190
	} else {
174
        delete m_pSlave;
191
        delete m_pSlave;
175
        m_pSlave = 0L;
192
        m_pSlave = 0L;
193
	}
176
194
177
        status = ST_STOPPED;
195
        status = ST_STOPPED;
178
        slotUpdateActions();
196
        slotUpdateActions();

Return to bug 41515