Patch to enable log file rotation via SIGUSR1 handler
"Justin Akehurst" <[email protected]> Wed, 1 Dec 2010 11:13:27 -0800
| Newsgroups | gmane.comp.python.webware |
|---|---|
| Message-ID | <476FC2247D6C7843A4814ED64344560C02F133D4@seaxch10.desktop.isilon.com> |
This is a multi-part message in MIME format.
--===============6408725878482720718==
Content-class: urn:content-classes:message
Content-Type: multipart/related; type="multipart/alternative";
boundary="----_=_NextPart_001_01CB918B.D538214B"
This is a multi-part message in MIME format.
------_=_NextPart_001_01CB918B.D538214B
Content-Type: multipart/alternative;
boundary="----_=_NextPart_002_01CB918B.D538214B"
------_=_NextPart_002_01CB918B.D538214B
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
I had to hack in the ability to rotate the log files while the Appserver
was still running, to avoid downtime.
This works nicely with newsyslog on BSD systems.
=20
It isn't pretty, or ideal, but at least it works. Hopefully this will
seed the idea of working this feature into WebWare in a future release
so that I don't have to patch it on my side.
=20
The patch for ThreadedAppServer.py also includes a fix for BSD systems
regarding opening the socket with appropriate flags set.
=20
=20
--- WebKit/ThreadedAppServer.py.orig Sun Jan 25 06:17:38 2009
+++ WebKit/ThreadedAppServer.py Wed Jul 8 13:10:30 2009
@@ -271,6 +271,19 @@
try:
sock.bind(serverAddress)
sock.listen(1024)
+ try:
+ import fcntl
+ fd =3D sock.fileno()
+ flags =3D fcntl.fcntl(fd, fcntl.F_GETFD)
+ try:
+ flags |=3D fcntl.FD_CLOEXEC
+ except AttributeError, e:
+ # Python 2.2 does not include
FD_CLOEXEC
+ flags |=3D 1
+ fcntl.fcntl(fd, fcntl.F_SETFD, flags)
+ except ImportError, e:
+ # Platform does not have fcntl module
+ pass
except Exception:
print "Error: Can not listen for %s on %s" % (
handlerClass.settingPrefix,
str(serverAddress))
@@ -1310,7 +1323,11 @@
print "App server has been signaled to shutdown."
if server and server._running > 2:
print "Shutting down at", asclocaltime()
+ global logtuple
+ log, stdout, stderr =3D logtuple
sys.stdout.flush()
+ sys.stdout, sys.stderr =3D stdout, stderr
+ log.close()
server._running =3D 2
if signum =3D=3D SIGINT:
raise KeyboardInterrupt
@@ -1321,6 +1338,34 @@
else:
print "No running app server was found."
+def rotateLogs(signum, frame):
+ print
+ print "App server has been signaled to rotate logs."
+ if server and server._running > 2:
+ print "Rotating logs at", asclocaltime()
+ logFile =3D
server.serverSidePath(server.application().setting('ErrorLogFilename'))
+ # attempt to close logs
+ global logtuple
+ log, stdout, stderr =3D logtuple
+ if log:
+ sys.stdout, sys.stderr =3D stdout, stderr
+ log.close()
+
+ try:
+ log =3D open(logFile, 'a', 1) # append, line =
buffered
mode
+ print 'Output has been redirected to %r...' %
logFile
+ stdout, stderr =3D sys.stdout, sys.stderr
+ sys.stdout =3D sys.stderr =3D log
+ logtuple =3D (log, stdout, stderr)
+ except IOError, error:
+ print 'Cannot redirect output to %r.' % logFile
+ print error.strerror
+ log =3D None
+ sys.exit(1)
+ else:
+ print "No running app server was found."
+
+
try:
# Use the threadframe module for dumping thread stack frames:
# http://www.majid.info/mylos/stories/2004/06/10/threadframe.html
@@ -1371,6 +1416,11 @@
signal.signal(SIGINT, shutDown)
except AttributeError:
SIGINT =3D None
+try:
+ SIGUSR1 =3D signal.SIGUSR1
+ signal.signal(SIGUSR1, rotateLogs)
+except AttributeError:
+ SIGUSR1 =3D None
if threadDump:
@@ -1392,6 +1442,7 @@
import re
settingRE =3D
re.compile(r'^(?:--)?([a-zA-Z][a-zA-Z0-9]*\.[a-zA-Z][a-zA-Z0-9]*)=3D')
from MiscUtils import Configurable
+import types
usage =3D re.search('\n.* arguments:\n\n(.*\n)*?\n', __doc__).group(0)
@@ -1405,8 +1456,12 @@
function =3D run
daemon =3D False
workDir =3D None
+ global logtuple
+ logtuple =3D None
for a in args[:]:
- if settingRE.match(a):
+ if isinstance(a, types.TupleType):
+ logtuple =3D a
+ elif settingRE.match(a):
match =3D settingRE.match(a)
name =3D match.group(1)
value =3D a[match.end():]
--- WebKit/Launch.py.orig Sun Jan 25 06:17:38 2009
+++ WebKit/Launch.py Wed Jul 8 13:10:30 2009
@@ -431,6 +431,8 @@
print 'WARNING: Applications run much slower when
profiled,'
print 'so turn off profiling in Launch.py when you
are finished.'
else:
+ if log is not None:
+ args[2].append((log, stdout, stderr))
errorlevel =3D launchWebKit(*args)
finally:
print
=20
=20
Regards,
=20
Justin Akehurst
Software Development Engineer II, UI
Main: (206) 315-7500 Fax: (206) 315-7501
Direct: (206) 315-7576 Mobile: (206) 790-4736
Twitter <http://www.twitter.com/isilon> | Blog
<http://www.isilon.com/isiBlogs/> | Web <http://www.isilon.com/> |=20
YouTube <http://www.youtube.com/IsilonTV>=20
Simple is Smart(tm)
=20
=20
------_=_NextPart_002_01CB918B.D538214B
Content-Type: text/html;
charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
<html xmlns:v=3D"urn:schemas-microsoft-com:vml" =
xmlns:o=3D"urn:schemas-microsoft-com:office:office" =
xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:x=3D"urn:schemas-microsoft-com:office:excel" =
xmlns:p=3D"urn:schemas-microsoft-com:office:powerpoint" =
xmlns:a=3D"urn:schemas-microsoft-com:office:access" =
xmlns:dt=3D"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" =
xmlns:s=3D"uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" =
xmlns:rs=3D"urn:schemas-microsoft-com:rowset" xmlns:z=3D"#RowsetSchema" =
xmlns:b=3D"urn:schemas-microsoft-com:office:publisher" =
xmlns:ss=3D"urn:schemas-microsoft-com:office:spreadsheet" =
xmlns:c=3D"urn:schemas-microsoft-com:office:component:spreadsheet" =
xmlns:odc=3D"urn:schemas-microsoft-com:office:odc" =
xmlns:oa=3D"urn:schemas-microsoft-com:office:activation" =
xmlns:html=3D"http://www.w3.org/TR/REC-html40" =
xmlns:q=3D"http://schemas.xmlsoap.org/soap/envelope/" =
xmlns:rtc=3D"http://microsoft.com/officenet/conferencing" =
xmlns:D=3D"DAV:" xmlns:Repl=3D"http://schemas.microsoft.com/repl/" =
xmlns:mt=3D"http://schemas.microsoft.com/sharepoint/soap/meetings/" =
xmlns:x2=3D"http://schemas.microsoft.com/office/excel/2003/xml" =
xmlns:ppda=3D"http://www.passport.com/NameSpace.xsd" =
xmlns:ois=3D"http://schemas.microsoft.com/sharepoint/soap/ois/" =
xmlns:dir=3D"http://schemas.microsoft.com/sharepoint/soap/directory/" =
xmlns:ds=3D"http://www.w3.org/2000/09/xmldsig#" =
xmlns:dsp=3D"http://schemas.microsoft.com/sharepoint/dsp" =
xmlns:udc=3D"http://schemas.microsoft.com/data/udc" =
xmlns:xsd=3D"http://www.w3.org/2001/XMLSchema" =
xmlns:sub=3D"http://schemas.microsoft.com/sharepoint/soap/2002/1/alerts/"=
xmlns:ec=3D"http://www.w3.org/2001/04/xmlenc#" =
xmlns:sp=3D"http://schemas.microsoft.com/sharepoint/" =
xmlns:sps=3D"http://schemas.microsoft.com/sharepoint/soap/" =
xmlns:xsi=3D"http://www.w3.org/2001/XMLSchema-instance" =
xmlns:udcs=3D"http://schemas.microsoft.com/data/udc/soap" =
xmlns:udcxf=3D"http://schemas.microsoft.com/data/udc/xmlfile" =
xmlns:udcp2p=3D"http://schemas.microsoft.com/data/udc/parttopart" =
xmlns:wf=3D"http://schemas.microsoft.com/sharepoint/soap/workflow/" =
xmlns:dsss=3D"http://schemas.microsoft.com/office/2006/digsig-setup" =
xmlns:dssi=3D"http://schemas.microsoft.com/office/2006/digsig" =
xmlns:mdssi=3D"http://schemas.openxmlformats.org/package/2006/digital-sig=
nature" =
xmlns:mver=3D"http://schemas.openxmlformats.org/markup-compatibility/2006=
" xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" =
xmlns:mrels=3D"http://schemas.openxmlformats.org/package/2006/relationshi=
ps" xmlns:spwp=3D"http://microsoft.com/sharepoint/webpartpages" =
xmlns:ex12t=3D"http://schemas.microsoft.com/exchange/services/2006/types"=
=
xmlns:ex12m=3D"http://schemas.microsoft.com/exchange/services/2006/messag=
es" =
xmlns:pptsl=3D"http://schemas.microsoft.com/sharepoint/soap/SlideLibrary/=
" =
xmlns:spsl=3D"http://microsoft.com/webservices/SharePointPortalServer/Pub=
lishedLinksService" xmlns:Z=3D"urn:schemas-microsoft-com:" =
xmlns:st=3D"" xmlns=3D"http://www.w3.org/TR/REC-html40"><head><meta =
http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dus-ascii"><meta name=3DProgId content=3DWord.Document><meta =
name=3DGenerator content=3D"Microsoft Word 12"><meta name=3DOriginator =
content=3D"Microsoft Word 12"><link rel=3DFile-List =
href=3D"cid:[email protected]"><link rel=3DEdit-Time-Data =
href=3D"cid:editdata.mso"><!--[if !mso]><style>v\:* =
{behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:DoNotRelyOnCSS/>
<o:TargetScreenSize>1024x768</o:TargetScreenSize>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:SpellingState>Clean</w:SpellingState>
<w:TrackMoves>false</w:TrackMoves>
<w:TrackFormatting/>
<w:EnvelopeVis/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-US</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:DontVertAlignCellWithSp/>
<w:DontBreakConstrainedForcedTables/>
<w:DontVertAlignInTxbx/>
<w:Word11KerningPairs/>
<w:CachedColBalance/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
<m:mathPr>
<m:mathFont m:val=3D"Cambria Math"/>
<m:brkBin m:val=3D"before"/>
<m:brkBinSub m:val=3D"--"/>
<m:smallFrac m:val=3D"off"/>
<m:dispDef/>
<m:lMargin m:val=3D"0"/>
<m:rMargin m:val=3D"0"/>
<m:defJc m:val=3D"centerGroup"/>
<m:wrapIndent m:val=3D"1440"/>
<m:intLim m:val=3D"subSup"/>
<m:naryLim m:val=3D"undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState=3D"false" DefUnhideWhenUsed=3D"true" =
DefSemiHidden=3D"true" DefQFormat=3D"false" DefPriority=3D"99" =
LatentStyleCount=3D"267">
<w:LsdException Locked=3D"false" Priority=3D"0" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Normal"/>
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"heading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" =
Name=3D"heading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" =
Name=3D"heading 3"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" =
Name=3D"heading 4"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" =
Name=3D"heading 5"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" =
Name=3D"heading 6"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" =
Name=3D"heading 7"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" =
Name=3D"heading 8"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" =
Name=3D"heading 9"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 1"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 2"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 3"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 4"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 5"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 6"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 7"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 8"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 9"/>
<w:LsdException Locked=3D"false" Priority=3D"35" QFormat=3D"true" =
Name=3D"caption"/>
<w:LsdException Locked=3D"false" Priority=3D"10" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Title"/>
<w:LsdException Locked=3D"false" Priority=3D"1" Name=3D"Default =
Paragraph Font"/>
<w:LsdException Locked=3D"false" Priority=3D"11" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtitle"/>
<w:LsdException Locked=3D"false" Priority=3D"22" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Strong"/>
<w:LsdException Locked=3D"false" Priority=3D"20" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"59" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Table Grid"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" =
Name=3D"Placeholder Text"/>
<w:LsdException Locked=3D"false" Priority=3D"1" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"No Spacing"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Light Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Light List"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Light Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium List 1"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium List 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Dark List"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Colorful Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Colorful List"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Colorful Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Light List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 1"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" =
Name=3D"Revision"/>
<w:LsdException Locked=3D"false" Priority=3D"34" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"List Paragraph"/>
<w:LsdException Locked=3D"false" Priority=3D"29" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"30" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Light List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Light List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Light List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Light List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Light List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"19" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"21" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"31" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"32" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"33" SemiHidden=3D"false" =
UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Book Title"/>
<w:LsdException Locked=3D"false" Priority=3D"37" Name=3D"Bibliography"/>
<w:LsdException Locked=3D"false" Priority=3D"39" QFormat=3D"true" =
Name=3D"TOC Heading"/>
</w:LatentStyles>
</xml><![endif]--><style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;
mso-font-alt:"Calisto MT";
mso-font-charset:0;
mso-generic-font-family:roman;
mso-font-pitch:variable;
mso-font-signature:-1610611985 1107304683 0 0 415 0;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;
mso-font-alt:"Arial Rounded MT Bold";
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-pitch:variable;
mso-font-signature:-520092929 1073786111 9 0 415 0;}
@font-face
{font-family:Tahoma;
panose-1:2 11 6 4 3 5 4 4 2 4;
mso-font-alt:Arial;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-pitch:variable;
mso-font-signature:-520081665 -1073717157 41 0 66047 0;}
@font-face
{font-family:Consolas;
panose-1:2 11 6 9 2 2 4 3 2 4;
mso-font-charset:0;
mso-generic-font-family:modern;
mso-font-pitch:fixed;
mso-font-signature:-520092929 1073806591 9 0 415 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-parent:"";
margin:0in;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-fareast-font-family:Calibri;
mso-hansi-font-family:Calibri;
mso-bidi-font-family:"Times New Roman";}
a:link, span.MsoHyperlink
{mso-style-noshow:yes;
mso-style-priority:99;
color:blue;
text-decoration:underline;
text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-noshow:yes;
mso-style-priority:99;
color:purple;
text-decoration:underline;
text-underline:single;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
{mso-style-noshow:yes;
mso-style-priority:99;
mso-style-link:"Balloon Text Char";
margin:0in;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:8.0pt;
font-family:"Tahoma","sans-serif";
mso-fareast-font-family:Calibri;}
span.EmailStyle17
{mso-style-type:personal-compose;
mso-style-noshow:yes;
mso-style-unhide:no;
mso-ansi-font-size:11.0pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-fareast-font-family:Calibri;
mso-hansi-font-family:Calibri;
mso-bidi-font-family:"Times New Roman";
color:windowtext;}
span.BalloonTextChar
{mso-style-name:"Balloon Text Char";
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-unhide:no;
mso-style-locked:yes;
mso-style-link:"Balloon Text";
mso-ansi-font-size:8.0pt;
mso-bidi-font-size:8.0pt;
font-family:"Tahoma","sans-serif";
mso-ascii-font-family:Tahoma;
mso-hansi-font-family:Tahoma;
mso-bidi-font-family:Tahoma;}
span.SpellE
{mso-style-name:"";
mso-spl-e:yes;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
mso-ascii-font-family:Calibri;
mso-fareast-font-family:Calibri;
mso-hansi-font-family:Calibri;
mso-bidi-font-family:"Times New Roman";}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;
mso-header-margin:.5in;
mso-footer-margin:.5in;
mso-paper-source:0;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 10]><style>/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin:0in;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-hansi-font-family:Calibri;
mso-bidi-font-family:"Times New Roman";}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"2050" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]--></head><body lang=3DEN-US link=3Dblue =
vlink=3Dpurple style=3D'tab-interval:.5in'><div class=3DWordSection1><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>I had to hack in the =
ability to rotate the log files while the <span =
class=3DSpellE>Appserver</span> was still running, to avoid =
downtime.<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>This works nicely with =
<span class=3DSpellE>newsyslog</span> on BSD =
systems.<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span><=
/font></p><p class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>It isn't pretty, or =
ideal, but at least it works. Hopefully this will seed the idea of =
working this feature into <span class=3DSpellE>WebWare</span> in a =
future release so that I don't have to patch it on my =
side.<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span><=
/font></p><p class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>The patch for =
ThreadedAppServer.py also includes a fix for BSD systems regarding =
opening the socket with appropriate flags =
set.<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span><=
/font></p><p class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span><=
/font></p><p class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>--- <span =
class=3DSpellE>WebKit</span>/<span =
class=3DSpellE>ThreadedAppServer.py.orig</span><span =
style=3D'mso-spacerun:yes'> </span>Sun Jan 25 06:17:38 =
2009<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+++ <span =
class=3DSpellE>WebKit</span>/ThreadedAppServer.py<span =
style=3D'mso-spacerun:yes'> </span>Wed Jul<span =
style=3D'mso-spacerun:yes'> </span>8 13:10:30 =
2009<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span style=3D'font-size:10.0pt;font-family:Consolas'>@@ =
-271,6 +271,19 @@<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'><span =
style=3D'mso-tab-count:2'>  =
; =
</span>try:<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'><span =
style=3D'mso-tab-count:3'>  =
; =
</span><span class=3DSpellE>sock.bind</span>(<span =
class=3DSpellE>serverAddress</span>)<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'><span =
style=3D'mso-tab-count:3'>  =
; =
</span><span =
class=3DSpellE>sock.listen</span>(1024)<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:3'>  =
; =
</span>try:<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:4'>  =
; =
</span>import <span =
class=3DSpellE>fcntl</span><o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:4'>  =
; =
</span><span class=3DSpellE>fd</span> =3D =
<span class=3DSpellE>sock.fileno</span>()<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:4'>  =
; =
</span>flags =3D <span =
class=3DSpellE>fcntl.fcntl</span>(<span class=3DSpellE>fd</span>, <span =
class=3DSpellE>fcntl.F_GETFD</span>)<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:4'>  =
; =
=
</span>try:<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:5'>  =
; =
=
</span>flags |=3D <span =
class=3DSpellE>fcntl.FD_CLOEXEC</span><o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:4'>  =
; =
</span>except <span =
class=3DSpellE>AttributeError</span>, e:<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:5'>  =
; =
=
</span># Python 2.2 does not include =
FD_CLOEXEC<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:5'>  =
; =
=
</span>flags |=3D 1<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:4'>  =
; =
</span><span =
class=3DSpellE>fcntl.fcntl</span>(<span class=3DSpellE>fd</span>, <span =
class=3DSpellE>fcntl.F_SETFD</span>, =
flags)<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:3'>  =
; =
</span>except <span class=3DSpellE>ImportError</span>, =
e:<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:4'>  =
; =
</span># Platform does not have <span =
class=3DSpellE>fcntl</span> module<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:4'>  =
; =
=
</span>pass<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'><span =
style=3D'mso-tab-count:2'>  =
; </span>except =
Exception:<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'><span =
style=3D'mso-tab-count:3'>  =
; =
</span>print "Error: <span class=3DSpellE>Can not</span> listen =
for %s on %s" % (<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'><span =
style=3D'mso-tab-count:4'>  =
; =
</span><span =
class=3DSpellE>handlerClass.settingPrefix</span>, <span =
class=3DSpellE>str</span>(<span =
class=3DSpellE>serverAddress</span>))<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>@@ -1310,7 +1323,11 =
@@<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span style=3D'font-size:10.0pt;font-family:Consolas'> =
<span style=3D'mso-tab-count:1'> =
</span>print "App server has been signaled to =
shutdown."<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> <span =
style=3D'mso-tab-count:1'> </span>if =
server and <span class=3DSpellE>server._running</span> > =
2:<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span style=3D'font-size:10.0pt;font-family:Consolas'> =
<span =
style=3D'mso-tab-count:2'>  =
; </span>print "Shutting down at", =
<span =
class=3DSpellE>asclocaltime</span>()<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:2'>  =
; </span>global <span =
class=3DSpellE>logtuple</span><o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:2'>  =
; </span>log, <span =
class=3DSpellE>stdout</span>, <span class=3DSpellE>stderr</span> =3D =
<span class=3DSpellE>logtuple</span><o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> <span =
style=3D'mso-tab-count:2'>  =
; </span><span =
class=3DSpellE>sys.stdout.flush</span>()<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:2'>  =
; </span><span class=3DSpellE>sys.stdout</span>, =
<span class=3DSpellE>sys.stderr</span> =3D <span =
class=3DSpellE>stdout</span>, <span =
class=3DSpellE>stderr</span><o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:2'>  =
; </span><span =
class=3DSpellE>log.close</span>()<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> <span =
style=3D'mso-tab-count:2'>  =
; </span><span =
class=3DSpellE>server._running</span> =3D =
2<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span style=3D'font-size:10.0pt;font-family:Consolas'> =
<span =
style=3D'mso-tab-count:2'>  =
; </span>if <span class=3DSpellE>signum</span> =
=3D=3D SIGINT:<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> <span =
style=3D'mso-tab-count:3'>  =
; =
</span>raise <span =
class=3DSpellE>KeyboardInterrupt</span><o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>@@ -1321,6 +1338,34 =
@@<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span style=3D'font-size:10.0pt;font-family:Consolas'> =
<span style=3D'mso-tab-count:1'> =
</span>else:<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> <span =
style=3D'mso-tab-count:2'>  =
; </span>print "No running app server was =
found."<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> =
<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+def <span =
class=3DSpellE>rotateLogs</span>(<span class=3DSpellE>signum</span>, =
frame):<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:1'> =
</span>print<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:1'> </span>print =
"App server has been signaled to rotate =
logs."<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:1'> </span>if =
server and <span class=3DSpellE>server._running</span> > =
2:<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:2'>  =
; </span>print "Rotating logs at", =
<span =
class=3DSpellE>asclocaltime</span>()<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:2'>  =
; </span><span class=3DSpellE>logFile</span> =3D =
server.serverSidePath(server.application().setting('ErrorLogFilename'))<o=
:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:2'>  =
; </span># attempt to close =
logs<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:2'>  =
; </span>global <span =
class=3DSpellE>logtuple</span><o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:2'>  =
; </span>log, <span =
class=3DSpellE>stdout</span>, <span class=3DSpellE>stderr</span> =3D =
<span class=3DSpellE>logtuple</span><o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:2'>  =
; </span>if log:<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:3'>  =
; =
</span><span class=3DSpellE>sys.stdout</span>, <span =
class=3DSpellE>sys.stderr</span> =3D <span class=3DSpellE>stdout</span>, =
<span class=3DSpellE>stderr</span><o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:3'>  =
; =
</span><span =
class=3DSpellE>log.close</span>()<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<o:p></o:p></span></font=
></p><p class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:2'>  =
; </span>try:<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:3'>  =
; =
</span>log =3D open(<span class=3DSpellE>logFile</span>, 'a', 1) # =
append, line buffered mode<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:3'>  =
; =
</span>print 'Output has been redirected to %r...' % <span =
class=3DSpellE>logFile</span><o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:3'>  =
; =
</span><span class=3DSpellE>stdout</span>, <span =
class=3DSpellE>stderr</span> =3D <span class=3DSpellE>sys.stdout</span>, =
<span class=3DSpellE>sys.stderr</span><o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:3'>  =
; =
</span><span class=3DSpellE>sys.stdout</span> =3D <span =
class=3DSpellE>sys.stderr</span> =3D log<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:3'>  =
; =
</span><span class=3DSpellE>logtuple</span> =3D (log, <span =
class=3DSpellE>stdout</span>, <span =
class=3DSpellE>stderr</span>)<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:2'>  =
; </span>except <span =
class=3DSpellE>IOError</span>, error:<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:3'>  =
; =
</span>print 'Cannot redirect output to %r.' % <span =
class=3DSpellE>logFile</span><o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:3'>  =
; =
</span>print <span =
class=3DSpellE>error.strerror</span><o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:3'>  =
; =
</span>log =3D None<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:3'>  =
; =
</span><span =
class=3DSpellE>sys.exit</span>(1)<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:1'> =
</span>else:<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:2'>  =
; </span>print "No running app server was =
found."<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<o:p></o:p></span></font=
></p><p class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<o:p></o:p></span></font=
></p><p class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> =
try:<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span style=3D'font-size:10.0pt;font-family:Consolas'> =
<span style=3D'mso-tab-count:1'> </span># =
Use the <span class=3DSpellE>threadframe</span> module for dumping =
thread stack frames:<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> <span =
style=3D'mso-tab-count:1'> </span># =
http://www.majid.info/mylos/stories/2004/06/10/threadframe.html<o:p></o:p=
></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span style=3D'font-size:10.0pt;font-family:Consolas'>@@ =
-1371,6 +1416,11 @@<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> <span =
style=3D'mso-tab-count:1'> </span><span =
class=3DSpellE>signal.signal</span>(SIGINT, <span =
class=3DSpellE>shutDown</span>)<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> except <span =
class=3DSpellE>AttributeError</span>:<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> <span =
style=3D'mso-tab-count:1'> </span>SIGINT =
=3D None<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+try:<o:p></o:p></span></=
font></p><p class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:1'> </span>SIGUSR1 =
=3D signal.SIGUSR1<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:1'> </span><span =
class=3DSpellE>signal.signal</span>(SIGUSR1, <span =
class=3DSpellE>rotateLogs</span>)<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+except <span =
class=3DSpellE>AttributeError</span>:<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:1'> </span>SIGUSR1 =
=3D None<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span style=3D'font-size:10.0pt;font-family:Consolas'> =
<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'><span =
style=3D'mso-spacerun:yes'> </span>if <span =
class=3DSpellE>threadDump</span>:<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> =
<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span style=3D'font-size:10.0pt;font-family:Consolas'>@@ =
-1392,6 +1442,7 @@<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> import =
re<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span style=3D'font-size:10.0pt;font-family:Consolas'> =
<span class=3DSpellE>settingRE</span> =3D <span =
class=3DSpellE>re.compile</span>(r'^(?:--)?([a-<span =
class=3DSpellE>zA</span>-Z][a-zA-Z0-9]*\.[a-<span =
class=3DSpellE>zA</span>-Z][a-zA-Z0-9]*)=3D')<o:p></o:p></span></font></p=
><p class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> from <span =
class=3DSpellE>MiscUtils</span> import =
Configurable<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+import =
types<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span style=3D'font-size:10.0pt;font-family:Consolas'> =
<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'><span =
style=3D'mso-spacerun:yes'> </span>usage =3D <span =
class=3DSpellE>re.search</span>('\n.* arguments:\n\n(.*\n)*?\n', =
__doc__).group(0)<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> =
<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span style=3D'font-size:10.0pt;font-family:Consolas'>@@ =
-1405,8 +1456,12 @@<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> <span =
style=3D'mso-tab-count:1'> </span>function =
=3D run<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span style=3D'font-size:10.0pt;font-family:Consolas'> =
<span style=3D'mso-tab-count:1'> =
</span>daemon =3D False<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> <span =
style=3D'mso-tab-count:1'> </span><span =
class=3DSpellE>workDir</span> =3D None<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:1'> </span>global =
<span class=3DSpellE>logtuple</span><o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:1'> </span><span =
class=3DSpellE>logtuple</span> =3D None<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> <span =
style=3D'mso-tab-count:1'> </span>for a in =
<span class=3DSpellE>args</span>[:]:<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>-<span =
style=3D'mso-tab-count:2'>  =
; </span>if <span =
class=3DSpellE>settingRE.match</span>(a):<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:2'>  =
; </span>if <span =
class=3DSpellE>isinstance</span>(a, <span =
class=3DSpellE>types.TupleType</span>):<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:3'>  =
; =
</span><span class=3DSpellE>logtuple</span> =3D =
a<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:2'>  =
; </span><span class=3DSpellE>elif</span> <span =
class=3DSpellE>settingRE.match</span>(a):<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> <span =
style=3D'mso-tab-count:3'>  =
; =
</span>match =3D <span =
class=3DSpellE>settingRE.match</span>(a)<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> <span =
style=3D'mso-tab-count:3'>  =
; =
</span>name =3D <span =
class=3DSpellE>match.group</span>(1)<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> <span =
style=3D'mso-tab-count:3'>  =
; =
</span>value =3D a[<span =
class=3DSpellE>match.end</span>():]<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>--- <span =
class=3DSpellE>WebKit</span>/<span =
class=3DSpellE>Launch.py.orig</span><span =
style=3D'mso-spacerun:yes'> </span>Sun Jan 25 06:17:38 =
2009<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+++ <span =
class=3DSpellE>WebKit</span>/Launch.py<span =
style=3D'mso-spacerun:yes'> </span>Wed Jul<span =
style=3D'mso-spacerun:yes'> </span>8 13:10:30 =
2009<o:p></o:p></span></font></p><p class=3DMsoNormal><font size=3D2 =
face=3DConsolas><span style=3D'font-size:10.0pt;font-family:Consolas'>@@ =
-431,6 +431,8 @@<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> <span =
style=3D'mso-tab-count:3'>  =
; =
</span>print 'WARNING: Applications run much slower when =
profiled,'<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> <span =
style=3D'mso-tab-count:3'>  =
; =
</span>print 'so turn off profiling in Launch.py when you are =
finished.'<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> <span =
style=3D'mso-tab-count:2'>  =
; </span>else:<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:3'>  =
; =
</span>if log is not None:<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>+<span =
style=3D'mso-tab-count:4'>  =
; =
</span><span =
class=3DSpellE>args</span>[2].append((log, <span =
class=3DSpellE>stdout</span>, <span =
class=3DSpellE>stderr</span>))<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> <span =
style=3D'mso-tab-count:3'>  =
; =
</span><span class=3DSpellE>errorlevel</span> =3D <span =
class=3DSpellE>launchWebKit</span>(*<span =
class=3DSpellE>args</span>)<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> <span =
style=3D'mso-tab-count:1'> =
</span>finally:<o:p></o:p></span></font></p><p class=3DMsoNormal><font =
size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'> <span =
style=3D'mso-tab-count:2'>  =
; </span>print<o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span><=
/font></p><p class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span><=
/font></p><p class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'>Regards,<o:p></o:p></span=
></font></p><p class=3DMsoNormal><font size=3D2 face=3DCalibri><span =
style=3D'font-size:11.0pt'><o:p> </o:p></span></font></p><p =
class=3DMsoNormal style=3D'line-height:150%'><b><font size=3D2 =
color=3Dblack face=3DArial><span =
style=3D'font-size:10.0pt;line-height:150%;font-family:"Arial","sans-seri=
f";mso-fareast-font-family:"Times New =
Roman";color:black;font-weight:bold;mso-no-proof:yes'>Justin =
Akehurst</span></font></b><font color=3D"#1f497d"><span =
style=3D'mso-fareast-font-family:"Times New =
Roman";color:#1F497D;mso-no-proof:yes'><br></span></font><b><font =
size=3D2 color=3D"#595959" face=3DArial><span =
style=3D'font-size:10.0pt;line-height:150%;font-family:"Arial","sans-seri=
f";mso-fareast-font-family:"Times New =
Roman";color:#595959;font-weight:bold;mso-no-proof:yes'>Software =
</span></font></b><b><font size=3D2 color=3D"#595959" face=3DArial><span =
style=3D'font-size:10.0pt;line-height:150%;font-family:"Arial","sans-seri=
f";mso-fareast-font-family:"Times New =
Roman";color:#595959;font-weight:bold;mso-no-proof:yes'>Development</span=
></font></b><b><font size=3D2 color=3D"#595959" face=3DArial><span =
style=3D'font-size:10.0pt;line-height:150%;font-family:"Arial","sans-seri=
f";mso-fareast-font-family:"Times New =
Roman";color:#595959;font-weight:bold;mso-no-proof:yes'> Engineer II, =
UI</span></font></b><font color=3D"#1f497d"><span =
style=3D'mso-fareast-font-family:"Times New =
Roman";color:#1F497D;mso-no-proof:yes'><br></span></font><font size=3D1 =
color=3Dblack face=3DArial><span =
style=3D'font-size:8.0pt;line-height:150%;font-family:"Arial","sans-serif=
";mso-fareast-font-family:"Times New =
Roman";color:black;mso-no-proof:yes'>Main: (206) 315-7500 =
Fax: (206) 315-7501<o:p></o:p></span></font></p><p class=3DMsoNormal =
style=3D'line-height:150%'><font size=3D1 color=3Dblack =
face=3DArial><span =
style=3D'font-size:8.0pt;line-height:150%;font-family:"Arial","sans-serif=
";mso-fareast-font-family:"Times New =
Roman";color:black;mso-no-proof:yes'>Direct: (206) 315-7576 =
Mobile: (206) 790-4736</span></font><font color=3D"#1f497d"><span =
style=3D'mso-fareast-font-family:"Times New =
Roman";color:#1F497D;mso-no-proof:yes'><br><a =
href=3D"http://www.twitter.com/isilon"><font size=3D1 color=3Dblue =
face=3DArial><span =
style=3D'font-size:8.0pt;mso-bidi-font-size:11.0pt;line-height:150%;font-=
family:"Arial","sans-serif";color:blue'>Twitter</span></font></a></span><=
/font><font size=3D1 color=3Dblack face=3DArial><span =
style=3D'font-size:8.0pt;line-height:150%;font-family:"Arial","sans-serif=
";mso-fareast-font-family:"Times New =
Roman";color:black;mso-no-proof:yes'> | </span></font><font =
color=3D"#1f497d"><span style=3D'mso-fareast-font-family:"Times New =
Roman";color:#1F497D;mso-no-proof:yes'><a =
href=3D"http://www.isilon.com/isiBlogs/"><font size=3D1 color=3Dblue =
face=3DArial><span =
style=3D'font-size:8.0pt;mso-bidi-font-size:11.0pt;line-height:150%;font-=
family:"Arial","sans-serif";color:blue'>Blog</span></font></a></span></fo=
nt><font size=3D1 color=3Dblack face=3DArial><span =
style=3D'font-size:8.0pt;line-height:150%;font-family:"Arial","sans-serif=
";mso-fareast-font-family:"Times New =
Roman";color:black;mso-no-proof:yes'> | </span></font><font =
color=3D"#1f497d"><span style=3D'mso-fareast-font-family:"Times New =
Roman";color:#1F497D;mso-no-proof:yes'><a =
href=3D"http://www.isilon.com/"><font size=3D1 color=3Dblue =
face=3DArial><span =
style=3D'font-size:8.0pt;mso-bidi-font-size:11.0pt;line-height:150%;font-=
family:"Arial","sans-serif";color:blue'>Web</span></font></a></span></fon=
t><font size=3D1 color=3Dblack face=3DArial><span =
style=3D'font-size:8.0pt;line-height:150%;font-family:"Arial","sans-serif=
";mso-fareast-font-family:"Times New =
Roman";color:black;mso-no-proof:yes'> | </span></font><font =
color=3D"#1f497d"><span style=3D'mso-fareast-font-family:"Times New =
Roman";color:#1F497D;mso-no-proof:yes'><a =
href=3D"http://www.youtube.com/IsilonTV"><font size=3D1 color=3Dblue =
face=3DArial><span =
style=3D'font-size:8.0pt;mso-bidi-font-size:11.0pt;line-height:150%;font-=
family:"Arial","sans-serif";color:blue'>YouTube</span></font></a></span><=
/font><font size=3D1 color=3Dblack face=3DArial><span =
style=3D'font-size:8.0pt;line-height:150%;font-family:"Arial","sans-serif=
";mso-fareast-font-family:"Times New =
Roman";color:black;mso-no-proof:yes'><o:p></o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DCalibri><span =
style=3D'font-size:11.0pt;mso-fareast-font-family:"Times New =
Roman";mso-no-proof:yes'><img border=3D0 width=3D90 height=3D46 =
id=3D"Picture_x0020_1" =
src=3D"cid:[email protected]"></span></font><b><i><font =
size=3D1 color=3D"#595959" face=3DArial><span =
style=3D'font-size:9.0pt;font-family:"Arial","sans-serif";mso-fareast-fon=
t-family:"Times New =
Roman";color:#595959;font-weight:bold;font-style:italic;mso-no-proof:yes'=
>Simple is Smart™</span></font></i></b><span =
style=3D'mso-fareast-font-family:"Times New =
Roman";mso-no-proof:yes'><o:p></o:p></span></p><p =
class=3DMsoNormal><font size=3D2 face=3DCalibri><span =
style=3D'font-size:11.0pt'><o:p> </o:p></span></font></p><p =
class=3DMsoNormal><font size=3D2 face=3DConsolas><span =
style=3D'font-size:10.0pt;font-family:Consolas'><o:p> </o:p></span><=
/font></p></div></body></html>
------_=_NextPart_002_01CB918B.D538214B--
------_=_NextPart_001_01CB918B.D538214B
Content-Type: image/png;
name="image003.png"
Content-Transfer-Encoding: base64
Content-ID: <[email protected]>
Content-Description: image003.png
Content-Location: image003.png
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
------_=_NextPart_001_01CB918B.D538214B--
--===============6408725878482720718==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
------------------------------------------------------------------------------
Lotusphere 2011
Register now for Lotusphere 2011 and learn how
to connect the dots, take your collaborative environment
to the next level, and enter the era of Social Business.
http://p.sf.net/sfu/lotusphere-d2d
--===============6408725878482720718==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
Webware-discuss mailing list
Webware-discuss-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
https://lists.sourceforge.net/lists/listinfo/webware-discuss
--===============6408725878482720718==--