## 12. Pyro Change Log

(most recent entries at the end)

Pyro versions before 3.8 can be found in the archive.

### Pyro 3.8.1

- Pyro 3.8 is a bug-fix release that is almost completely backwards compatible with Pyro 3.7, apart from the exception change explained next.
- Pyro now uses an internal mutex to control concurrent access to proxy objects. You can now freely use proxy objects in different threads. The thread ownership check has been removed, and the _transferThread() method is now a stub.
- removed the exception args fiddling because it caused problems and depended on a deprecated python feature. If your code depends on the format of the exception.args field of an exception returned from a remote method call, you may need to change your code. This is the only thing that may not be backward compatible with code written for Pyro 3.7
- improved Jython and IronPython compatibility. See wiki pages for detailed info on this.
- fixed bug that self.daemon wasn't always set in NameServerStarter, causing problems with the shutdown and getServerSockets methods
- fixed pickling/copying of proxies (they were forgetting attributes such as oneway methods)
- version banner printing is now default off
- improved errorhandling of some protocol errors in protocol.py
- added request data format sanity check in protocol.py
- fixed /bin/env to /usr/bin/env in a couple of files (following patches from Ubuntu package)
- removed spaces in hashbang line in a lot of shellscripts (following patches from Ubuntu package)
- handle EINTR status (interrupted system call) during socket reads (no more ConnectionClosedError)
- fixed crash in initServer: storage dir checking issue with non-unique temporary files
- fixed crash in errormessage in naming.py
- changed relative imports to absolute imports
- a few more changes to certain del methods to avoid crashes
- nameserver locator no longer searches other hosts if an explicit hostname parameter is given
- pyro-xnsc didn't correctly use the hostname from the name server location textfield
- pyro-ns has new '-r' option to not look for existing name servers when starting a new one
- prefers hashlib over md5 module because of deprecation in newer python versions
- improved performance of supports_multithreading() and supports_compression() tests in util2.py (don't let them test the importing over and over again)
- removed util.py's dependency on protocol.py to avoid possible import problem
- fixed attrproxy getattr loop when deleting the object
- new config item PYROSSL_POSTCONNCHECK that you can set to 0 (default=1) to circumvent connection/certificate validations when using SSL
- user_passwd_auth example: passwords no longer stored as plaintext
- fixed server side connection exception when error occurs during oneway call
- The os can select a random port for your Pyro daemons if you set port=0 (and norange=1) when creating daemons. NS and ES also support this.
- You can now override the broadcast address for the name server and the name server locator. Added config items for this as well.
- fixed orig_import call in protocol.py for extra params that Python 2.6+ use
- replaced custom locking objects by imp.acquire_lock() to obtain global import lock in mobile code import logic
- autoreconnect example no longer stops after ten seconds
- benchmark example got its iterations heavily increased because of faster machines
- distributed-computing2 example generates easier numbers to avoid excessive computation times in factorization
- configuration.py, core.py, nsc.py explicitly import Pyro.errors to avoid import errors during runtime hopefully
- fixed monospace font in manual's print css; slightly tweaked the colors; headers are all underlined now (makes for easier reading when printed)
- ext/remote.py and remote_nons.py don't eat all break signals anymore (only ctrl-c), quickstart examples use timeout on loop to be able to break them
- cleanups in SSL code in protocol.py (receive loop, handleRequests, M2Crypto.threading.init() called if multithreading)
- added 2 convenience methods to the daemon: getLocalObject(guid) and getLocalObjectForProxy(proxy)
- AllInOne examples now use automatic port allocation to avoid port rebinding issues on certain os'es such as MacOS
- 3.8.1: fixed mobile code deadlock
- 3.8.1: better handling of socket.timeout errors

### 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