Actually, I think Jerrys patch was incorrect as it didn't ever
authorJeremy Allison <jra@samba.org>
Mon, 9 Sep 2002 06:44:29 +0000 (06:44 +0000)
committerJeremy Allison <jra@samba.org>
Mon, 9 Sep 2002 06:44:29 +0000 (06:44 +0000)
add the printing msg flag, only remove it. Also, we already
refcount the printer backchannel connection to add the connection
tdb flag just before after we register/deregister the notification
message handler.
Jerry please check !
Jeremy.
(This used to be commit c45364ae82e06364cbb11545d1262032e12a21b1)

source3/rpc_server/srv_spoolss_nt.c

index 795a420a23dc7ddd8de686490e4960d0b54a4a5f..a464f073fddd7b5c2dceb291ce472cb5a059ebd0 100644 (file)
@@ -4,7 +4,7 @@
  *  Copyright (C) Andrew Tridgell              1992-2000,
  *  Copyright (C) Luke Kenneth Casson Leighton 1996-2000,
  *  Copyright (C) Jean François Micouleau      1998-2000,
- *  Copyright (C) Jeremy Allison                   2001,
+ *  Copyright (C) Jeremy Allison               2001-2002,
  *  Copyright (C) Gerald Carter                       2000-2002,
  *  Copyright (C) Tim Potter                   2001-2002.
  *
@@ -170,41 +170,6 @@ static void free_spool_notify_option(SPOOL_NOTIFY_OPTION **pp)
        SAFE_FREE(*pp);
 }
 
-/****************************************************************************
- wrapper function to maintain a reference count to the number of
- open change notification handles we have
-****************************************************************************/
-
-static BOOL spooler_message_flags( BOOL doreg )
-{
-       static uint32 ref_count = 0;
-       BOOL result = True;
-
-       /* 
-        * check for boundary counditions ....
-        * if ref_count == 0 and we want to register OR
-        * if ref_count == 1 and we want to deregister, THEN
-        * OK.
-        */
-       
-       if ( ((ref_count == 0) && doreg) || ((ref_count == 1) && !doreg) )
-               result = register_message_flags( doreg, FLAG_MSG_PRINTING );
-
-       /* increment/decrement reference count */
-
-       if ( doreg )
-               ref_count++;
-       else {
-               /* minimum is always 0 */
-               if ( ref_count ) 
-                       ref_count--;
-       }
-
-       DEBUG(10,("spooler_message_flags: ref_count == %d\n", ref_count));
-
-       return result;
-}
-
 /***************************************************************************
  Disconnect from the client
 ****************************************************************************/
@@ -231,12 +196,12 @@ static void srv_spoolss_replycloseprinter(POLICY_HND *handle)
                cli_ulogoff(&notify_cli);
                cli_shutdown(&notify_cli);
                message_deregister(MSG_PRINTER_NOTIFY2);
-       }
 
-        /* Tell the connections db we're not interested in printer notify messages. */
-       /* reference count is handled by spooler_message_flags() */
+               /* Tell the connections db we're no longer interested in
+                * printer notify messages. */
 
-        spooler_message_flags( False );        
+               register_message_flags( False, FLAG_MSG_PRINTING );
+       }
 
        smb_connections--;
 }
@@ -2217,6 +2182,9 @@ static BOOL srv_spoolss_replyopenprinter(char *printer, uint32 localprinter, uin
                        return False;
                        
                message_register(MSG_PRINTER_NOTIFY2, receive_notify2_message_list);
+               /* Tell the connections db we're now interested in printer
+                * notify messages. */
+               register_message_flags( True, FLAG_MSG_PRINTING );
        }
 
        smb_connections++;