I dug into this further and discovered to my surprise that cupsd doesn't support daemonizing at all, it only supports backgrounding. And of course it forks before it calls listen() on its sockets. So frankly, I'm not sure how I thought "expect daemon" was going to help here.
Now, even if we patched cupsd to daemonize, or fixed bug #530779, upstart's handling of the reexec would *still* be a problem. So I still think this is a bug in its own right that we should fix.
I dug into this further and discovered to my surprise that cupsd doesn't support daemonizing at all, it only supports backgrounding. And of course it forks before it calls listen() on its sockets. So frankly, I'm not sure how I thought "expect daemon" was going to help here.
Now, even if we patched cupsd to daemonize, or fixed bug #530779, upstart's handling of the reexec would *still* be a problem. So I still think this is a bug in its own right that we should fix.