Mysterious Zeroc-Ice errors when working with Mumble
I upgraded some Mumble servers to version 1.2.3 and when I visited the control panel that I was using to manage the servers, I was greeted with some mysterious Ice errors… mainly the following two.
- Fatal error: Uncaught Ice_UnknownLocalException ../../include/Ice/BasicStream.h:362: Ice::NegativeSizeException: protocol error: negative size for sequence, dictionary
- Fatal error: Uncaught Ice_UnknownLocalException ../../include/Ice/BasicStream.h:551: Ice::UnmarshalOutOfBoundsException: protocol error: out of bounds during unmarshaling
The error messages themselves are absolute gibberish to me and don’t provide any useful hints as to what may be wrong. After some google searches and tinkering on the server, I figured out that the slice definition for Mumble had changed from version 1.2.2 to 1.2.3, so I updated the slice for Mumble on my web server where I was using Ice to communicate with the Mumble servers.
My “Mumble.ice” file was being stored in a directory called “/usr/share/slice/” Once I had dropped the new Mumble.ice file in place, I went to restart Apache. It didn’t work and the web server did not come back online. I checked the Apache log to find the following error.
[Wed Jul 11 13:53:07 2012] [notice] caught SIGTERM, shutting down
/usr/share/slice/Murmur.ice:9: error: Can’t open include file “Ice/SliceChecksumDict.ice”
#include <Ice/SliceChecksumDict.ice>
1 error in preprocessor.
PHP Fatal error: Unable to start ice module in Unknown on line 0
The new Mumble.ice file contains an include command at the top “#include <Ice/SliceChecksumDict.ice>” The “Ice” folder that it tries to include from was not in my include/class path and I didn’t feel like tinkering with settings any longer, so I just changed the include statement to point directly to the “SliceChecksumDict.ice” file, which on my system was located in “/usr/share/Ice-3.3.1/slice/Ice/SliceChecksumDict.ice”
After changing the include statement in the new Mumble.ice file to read “#include </usr/share/Ice-3.3.1/slice/Ice/SliceChecksumDict.ice>”, everything started working. Apache started up nicely and my earlier Fatal errors were gone thanks to the updated slice definition.
I hope this helps somebody else figure out their problem.