## 12. Pyro Change Log

(most recent entries at the end)

Pyro versions before 3.9 can be found in the archive.

### Pyro 3.9.1

- Fixed mobile code failing when needed to process depending modules (hierarchy)
- Nice new logo on website, also in manual
- Renamed some parameters in core.py to avoid overwriting the builtin type name 'object'
- Added '-x' option to name server to avoid starting a broadcast listener
- Much simpler setup.py script
- Added PYRO_ONEWAY_THREADED config item to tell Pyro to use a thread or not for oneway calls (default=1, use threads)
- NS and ES, and the nsc tools, can now all be started by using python -m
- Easy config diagnostic using python -m Pyro.configuration
- jython: added workarounds for jython 2.2 bugs regarding __import__
- jython: re-enabled broadcast name server lookup for newer jython versions (2.5+)
- jython: removed seemingly useless select call in protocol code that caused crash in jython's select module
- More info about 127.0.0.1 connection problems added to troubleshooting chapter in the manual
- Event server can now also run without name server
- Fixed possible deadlock in NS proxy when it needed to rebind to the server
- Added overview about threads,sessions,objects to usage chapter in manual
- Clarified TLS section in the manual
- Added session example to show use of TLS and user-session resource objects
- 3.9.1: fixed invalid uri crash when starting nameserver in persistent mode

### Pyro 3.10

- fixed localStorage for oneway calls
- unified PYROSSL_SERVER_CERT and PYROSSL_CLIENT_CERT into PYROSSL_CERT config item (this change is not backwards compatible; you'll have to update your code if you're using Pyro's SSL support)
- add a new PYROSSL_KEY configuration entry, useful when you're using a certificate that does not include the private key
- Updated docs about SSL support, and the ssl example (new keys etc).
- Pyro now uses new-style classes throughout ('super' should work now in your objects). Bumped protocol version because of this.
- it is now possible to disconnect objects from the daemon using their UID
- small tweaks of the way proxies are pickled to avoid certain problems
- fixed some pickling issues and added a pickle test example
- small fix in mobile code import code to avoid certain import problem
- Added a paragraph in the troubleshooting chapter about user defined exception classes
- Moved the EventServer's Event class to a separate module to avoid import errors

### Pyro 3.11

- fixed java import for Jython standalone
- use java5 UUID if available, instead of rmi vmid, in Jython
- locals are printed again in formatTraceback() on recent python versions
- scripts are now python scripts instead of shell scripts (not on Windows). This should be helpful for virtualenv users.
- The pyro-rns script is gone.
- added a connections test to the 'benchmark' example
- fix safe_select in protocol.py to not wait longer than specified timeout
- initTLS is now called properly on new threads spawned for oneway calls
- initTLS is now called in the context of the new thread instead of the parent thread. This fixes obscure thread initialization issues (could break COM).
- added 'tlstest' example to check if initTLS behaves as it should
- nameserver URI is no longer cleared when the NS shuts down, if it is running in persistent mode. Restarting the NS in persistent mode will now reuse the old URI.
- fixed threadsafety of PYROLOC uri resolving. (could cause 'unknown object id' exceptions)
- fixed threadsafety of Pyro SSL adapter.
- URI objects are no longer cloned inside the Pyro adapter, this avoids unnecessary binds, and threading issues. However you can no longer safely reuse an URI object that you gave to a Pyro proxy (the proxy takes ownership of the object now)
- Marked Pyro.ext deprecated, don't use it in new code
- Pyro's project site is no longer on Sourceforge. I've changed links to point to the new location.

### Pyro 3.12

- Fixed a possible data corruption issue by releasing the proxy connection in case of network transfer error. It is strongly advised to upgrade because of this error in older versions.

### Pyro 3.13

- Minimum supported Python version is now 2.5.
- Added a built-in echo server for test purposes (try: python -m Pyro.test.echoserver -h. See chapter 'Usage' for more info.)
- Replaced try...except around lock objects with context manager style 'with' statements to avoid deadlocks or other locking related problems.
- Removed a possible deadlocking call in the protocol adapter when it wanted to do a call without a current connection. It will raise an exception now.
- Set no-inherit flag on server socket to prevent problems with child processes blocking the socket
- Removed unneeded import agent logic and locking from handleInvocation. This sometimes was a cause of deadlock.

### Pyro 3.14

- added check for interrupted remote calls, close the connection to avoid corrupt transfers
- added example to autoreconnect example that doesn't use the name server

### Pyro 3.15

- added excepthook to Pyro.util that you can use in sys.excepthook to print remote exceptions. Exceptions example shows the use.
- moved pidfile location to /var/run (daemonizer.py) because of security vulnerability, Debian bug #631912
- unix command line tools in bin are now flagged executable
- updated some urls in the manual, and the manual is now hosted on Pypi

### Pyro 3.16

- connecting a proxy socket now also honors a timeout set by proxy._setTimeout()
- fix setNoInherit on 64-bits Python on Windows (see http://tech.oyster.com/cherrypy-ctypes-and-being-explicit/)