]> git.llucax.com Git - z.facultad/75.42/plaqui.git/blobdiff - Server/src/runnable.cpp
Se arregla el bug que hacia que el cliente levante mal archivos XML grandes.
[z.facultad/75.42/plaqui.git] / Server / src / runnable.cpp
index c134b834fbe0709a0314b241a72d93b9cce74661..6d000ce9c6d68f6adc47b271680ce537619222ee 100644 (file)
@@ -41,26 +41,26 @@ namespace Server {
 Runnable::~Runnable(void) {
 #ifdef DEBUG
        cerr << __FILE__ << "(" << __LINE__ << ")"
 Runnable::~Runnable(void) {
 #ifdef DEBUG
        cerr << __FILE__ << "(" << __LINE__ << ")"
-               << ": destructor(this = " << this << ")"
-               << endl;
+               << ": destructor(this = " << this << ")." << endl;
 #endif // DEBUG
 }
 
 #endif // DEBUG
 }
 
-Runnable::Runnable(void): thread(0), stop(false) {
+Runnable::Runnable(void): _thread(NULL), _stop(false) {
 #ifdef DEBUG
        cerr << __FILE__ << "(" << __LINE__ << ")"
 #ifdef DEBUG
        cerr << __FILE__ << "(" << __LINE__ << ")"
-               << ": constructor." << endl;
+               << ": constructor(this = " << this << ")." << endl;
 #endif // DEBUG
 }
 
 void Runnable::static_run(Runnable* runner) {
 #ifdef DEBUG
        cerr << __FILE__ << "(" << __LINE__ << ")"
 #endif // DEBUG
 }
 
 void Runnable::static_run(Runnable* runner) {
 #ifdef DEBUG
        cerr << __FILE__ << "(" << __LINE__ << ")"
-               << ": static_run(runner = " << runner << ")"
-               << endl;
+               << ": static_run(runner = " << runner << ")" << endl;
 #endif // DEBUG
 #endif // DEBUG
+       // Corre tarea.
        runner->real_run();
        runner->real_run();
-       runner->finished();
+       // Manda señal de tarea finalizada
+       runner->_finished();
        delete runner;
 }
 
        delete runner;
 }
 
@@ -73,9 +73,8 @@ void Runnable::run(bool detach) {
        if (detach) {
                // Corremos el thread en una funcion estática para poder destruirlo al
                // finalizar, pasandole el puntero al objeto.
        if (detach) {
                // Corremos el thread en una funcion estática para poder destruirlo al
                // finalizar, pasandole el puntero al objeto.
-               thread = Glib::Thread::create(
-                               SigC::bind<Runnable*>(SigC::slot(&Runnable::static_run), this),
-                               true);
+               _thread = Glib::Thread::create(
+                               SigC::bind(SigC::slot(&Runnable::static_run), this), false);
        // Si no corremos la tarea normalmente.
        } else {
                real_run();
        // Si no corremos la tarea normalmente.
        } else {
                real_run();
@@ -83,23 +82,33 @@ void Runnable::run(bool detach) {
                
 }
 
                
 }
 
-void Runnable::finish(bool attach) {
+void Runnable::finish(void) {
 #ifdef DEBUG
        cerr << __FILE__ << "(" << __LINE__ << ")"
 #ifdef DEBUG
        cerr << __FILE__ << "(" << __LINE__ << ")"
-               << ": finish(attach = " << attach << ")" << endl;
+               << ": finish();" << endl;
 #endif // DEBUG
 #endif // DEBUG
-       stop = true;
-       if (attach) {
-               thread->join();
-       }
+       stop(true);
+}
+
+bool Runnable::stop(void) {
+       Glib::Mutex::Lock lock(stop_mutex);
+       bool tmp = _stop;
+       return tmp;
+}
+
+bool Runnable::stop(bool stop) {
+       Glib::Mutex::Lock lock(stop_mutex);
+       bool tmp = _stop;
+       _stop = stop;
+       return tmp;
 }
 
 Runnable::SignalFinished& Runnable::signal_finished(void) {
 }
 
 Runnable::SignalFinished& Runnable::signal_finished(void) {
-       return finished;
+       return _finished;
 }
 
 Runnable::SignalError& Runnable::signal_error(void) {
 }
 
 Runnable::SignalError& Runnable::signal_error(void) {
-       return error;
+       return _error;
 }
 
 } // namespace Server
 }
 
 } // namespace Server