Show
Ignore:
Timestamp:
05/24/04 13:59:51 (20 years ago)
Author:
jalet
Message:

More robust (?) code

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • pykota/trunk/bin/cupspykota

    r1492 r1493  
    2424# 
    2525# $Log$ 
     26# Revision 1.47  2004/05/24 11:59:46  jalet 
     27# More robust (?) code 
     28# 
    2629# Revision 1.46  2004/05/21 22:02:51  jalet 
    2730# Preliminary work on pre-accounting 
     
    392395                # First check if original backend is still alive 
    393396                status = subprocess.poll() 
    394                  
     397            except :     
     398                self.logdebug("Interrupted Poll") 
     399                time.sleep(0.01) # give some time to the CPU 
     400            else : 
    395401                # Now if we got SIGTERM, we have  
    396402                # to kill -TERM the original backend 
     
    411417                    for (fd, mask) in availablefds : 
    412418                        # self.logdebug(self.formatFileEvent(fd, mask, instreams, outstreams)) 
    413                         try : 
    414                             if mask & (select.POLLIN | select.POLLPRI) :      
    415                                 # We have something to read 
     419                        if mask & (select.POLLIN | select.POLLPRI) :      
     420                            # We have something to read 
     421                            try : 
     422                                fobj = instreams[fd] 
     423                            except KeyError :     
     424                                self.logdebug("READ : %s" % self.formatFileEvent(fd, mask, instreams, outstreams)) 
     425                            else :     
    416426                                try : 
    417                                     fobj = instreams[fd] 
    418                                 except KeyError :     
    419                                     self.logdebug("READ : %s" % self.formatFileEvent(fd, mask, instreams, outstreams)) 
     427                                    data = fobj["file"].read() 
     428                                except IOError, msg :     
     429                                    self.logdebug("Interrupted Read : %s" % msg) 
    420430                                else :     
    421                                     data = fobj["file"].read() 
    422431                                    if not data : 
    423432                                        self.logdebug("No more data to read on %s (read returned nothing)" % fobj["name"]) 
     
    428437                                        # self.logdebug("%s -- DATA[%i] <= : %s ..." % (self.formatFileEvent(fd, mask, instreams, outstreams), len(data), data[:50])) 
    429438                                        fout = outstreams[fobj["out"]]["file"] 
    430                                         fout.write(data) 
    431                                         fout.flush() 
    432                                              
    433                             if mask & (select.POLLHUP | select.POLLERR) : 
    434                                 # Some pipe has no more datas so we don't 
    435                                 # want to continue to poll this file 
    436                                 toclose = None 
    437                                 try : 
    438                                     fobj = instreams[fd] 
    439                                     if fobj["name"] == "stdin" : 
    440                                         toclose = outstreams[fobj["out"]] 
    441                                     self.logdebug("No more data to read from %s (POLLUP or POLLERR received)" % fobj["name"]) 
    442                                 except KeyError :     
    443                                     fobj = outstreams[fd] 
    444                                     if fobj["name"] == "stderr" : 
    445                                         toclose = instreams[fobj["in"]] 
    446                                     self.logdebug("No more data to write to %s (POLLUP or POLLERR received)" % fobj["name"]) 
     439                                        try : 
     440                                            fout.write(data) 
     441                                        except IOError, msg :     
     442                                            self.logdebug("Interrupted Write : %s" % msg) 
     443                                        else :     
     444                                            try : 
     445                                                fout.flush() 
     446                                            except IOError, msg :     
     447                                                self.logdebug("Interrupted Flush : %s" % msg) 
     448                                         
     449                        if mask & (select.POLLHUP | select.POLLERR) : 
     450                            # Some pipe has no more datas so we don't 
     451                            # want to continue to poll this file 
     452                            toclose = None 
     453                            try : 
     454                                fobj = instreams[fd] 
     455                                if fobj["name"] == "stdin" : 
     456                                    toclose = outstreams[fobj["out"]] 
     457                                self.logdebug("No more data to read from %s (POLLUP or POLLERR received)" % fobj["name"]) 
     458                            except KeyError :     
     459                                fobj = outstreams[fd] 
     460                                if fobj["name"] == "stderr" : 
     461                                    toclose = instreams[fobj["in"]] 
     462                                self.logdebug("No more data to write to %s (POLLUP or POLLERR received)" % fobj["name"]) 
     463                                 
     464                            if not fobj["done"] : 
     465                                self.unregisterFileNo(pollster, fd) 
     466                                fobj["done"] = 1 
     467                                if toclose is not None : 
     468                                    self.logdebug("Closing %s" % toclose["name"]) 
     469                                    try : 
     470                                        toclose["file"].close() 
     471                                    except :     
     472                                        self.logdebug("Interrupted Close") 
    447473                                     
    448                                 if not fobj["done"] : 
    449                                     self.unregisterFileNo(pollster, fd) 
    450                                     fobj["done"] = 1 
    451                                     if toclose is not None : 
    452                                         self.logdebug("Closing %s" % toclose["name"]) 
    453                                         toclose["file"].close() 
    454                                          
    455                             if mask & select.POLLNVAL :             
    456                                 self.logdebug("CLOSED : %s" % self.formatFileEvent(fd, mask, instreams, outstreams)) 
    457                                  
    458                         except IOError, msg :                 
    459                             self.logdebug("IOError : %s -- %s" % (msg, self.formatFileEvent(fd, mask, instreams, outstreams))) 
    460                             time.sleep(0.01) # give some time to the CPU 
    461             except IOError, msg : 
    462                 self.logdebug("IOError : %s" % msg) 
    463                 time.sleep(0.01) # give some time to the CPU 
     474                        if mask & select.POLLNVAL :             
     475                            self.logdebug("CLOSED : %s" % self.formatFileEvent(fd, mask, instreams, outstreams)) 
    464476                 
    465477        self.logdebug("Exiting streams polling loop...")