Show
Ignore:
Timestamp:
05/07/04 16:44:53 (20 years ago)
Author:
jalet
Message:

Fix for file handles unregistered twice from the polling object

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • pykota/trunk/bin/cupspykota

    r1433 r1458  
    2424# 
    2525# $Log$ 
     26# Revision 1.39  2004/05/07 14:44:53  jalet 
     27# Fix for file handles unregistered twice from the polling object 
     28# 
    2629# Revision 1.38  2004/04/09 22:24:46  jalet 
    2730# Began work on correct handling of child processes when jobs are cancelled by 
     
    280283        return retcode     
    281284                     
     285    def unregisterFileNo(self, pollobj, fileno) :                 
     286        """Removes a file handle from the polling object.""" 
     287        try : 
     288            pollobj.unregister(fileno) 
     289        except KeyError :     
     290            self.logger.log_message(_("File number %s unregistered twice from polling object, ignored.") % fileno, "warn") 
     291        else :     
     292            self.logdebug("File number %s unregistered from polling object." % fileno) 
     293             
    282294    def handleData(self) :                     
    283295        """Pass the job's data to the real backend.""" 
     
    369381                            indata = "" 
    370382                        if endinput :     
    371                             pollster.unregister(tocfno)         
     383                            self.unregisterFileNo(pollster, tocfno)         
    372384                            self.logdebug("Closing real backend's stdin.") 
    373385                            os.close(tocfno) 
     
    382394                            outdata = "" 
    383395                        if endoutput :     
    384                             pollster.unregister(stdoutfno)         
     396                            self.unregisterFileNo(pollster, stdoutfno)         
    385397                            outputclosed = 1 
    386398                    elif fd == stderrfno : 
     
    393405                            errdata = "" 
    394406                        if enderr :     
    395                             pollster.unregister(stderrfno)         
     407                            self.unregisterFileNo(pollster, stderrfno)         
    396408                            errclosed = 1 
    397409                if (mask & select.POLLIN) or (mask & select.POLLPRI) :      
     
    401413                        indata += data 
    402414                        if not data :    # If yes, then no more input data 
    403                             pollster.unregister(infno) 
     415                            self.unregisterFileNo(pollster, infno) 
    404416                            self.logdebug("Input data ends.") 
    405417                            endinput = 1 # this happens with real files. 
     
    414426                    #  
    415427                    # Some standard I/O stream has no more datas 
    416                     pollster.unregister(fd) 
     428                    self.unregisterFileNo(pollster, fd) 
    417429                    if fd == infno : 
    418430                        # Here we are in the case where the input file is stdin.