rem: inFile->close();
context: void KMFilterActionExtFilter::processAsync(KMMessage* aMsg) const{  ActionScheduler *handler = MessageProperty::filterHandler( aMsg->getMsgSerNum() );  KTempFile * inFile = new KTempFile;  inFile->setAutoDelete(FALSE);  inFile->close();  QPtrList<KTempFile> atmList;  atmList.setAutoDelete(TRUE);  atmList.append( inFile );  QString commandLine = substituteCommandLineArgsFor( aMsg , atmList );  if ( commandLine.isEmpty() )    handler->actionMessage( ErrorButGoOn );  // The parentheses force the creation of a subshell  // in which the user-specified command is executed.  // This is to really catch all output of the command as well  // as to avoid clashes of our redirection with the ones  // the user may have specified. In the long run, we  // shouldn't be using tempfiles at all for this class, due  // to security aspects. (mmutz)  commandLine =  "(" + commandLine + ") <" + inFile->name();  // write message to file  QString tempFileName = inFile->name();  kCStringToFile( aMsg->asString(), tempFileName, //###      false, false, false );  PipeJob *job = new PipeJob(0, 0, aMsg, commandLine, tempFileName);  QObject::connect ( job, SIGNAL( done() ), handler, SLOT( actionMessage() ) );  kmkernel->weaver()->enqueue(job);}