cups_async_callback() is called to receive new printcap data from a child process which requests the information from cupsd. Newly received printcap information is stored in a temporary printcap cache (tmp_pcap_cache). Once the child process closes the printcap IPC file descriptor, the system printcap cache is replaced with the newly populated tmp_pcap_cache, however this only occurs if tmp_pcap_cache is non null (has at least one printer). If the printcap cache is empty, which is the case when cups is not exporting any printers, the printcap cache is not replaced resulting in stale data. The test script attached to bug 7836 can be used to reproduce this bug: https://bugzilla.samba.org/attachment.cgi?id=6170 Start the script with no printers presented by cups. The workaround is to ensure that cups is always exporting at least one printer.
The fix was previously sent to the samba-technical mailing list: http://lists.samba.org/archive/samba-technical/2010-December/075488.html New version re-based against master, with variable name change. Patch attachment to follow. The following changes since commit d7af8753abf7dfea6af334e2a6eb9e175127a139: s3-waf: fix the build after rpc_winreg removal. (2011-01-14 11:38:40 +0100) are available in the git repository at: git://oss.sgi.com/ddiss/samba bso7915_cups_pcap_reload_no_printers_rb1 David Disseldorp (2): s3-printing: remove unneeded local_pcap_copy global s3-printing: fix cups pcap reload with no printers source3/printing/print_cups.c | 86 +++++++++++++++++++---------------------- 1 files changed, 40 insertions(+), 46 deletions(-)
Created attachment 6201 [details] bso7915_cups_pcap_reload_no_printers_rb1.patch
flag for review
I will look at this.
This is in master and v3-6-test.