svn commit: samba r2191 - in branches/SAMBA_3_0/source/printing: .

jerry at samba.org jerry at samba.org
Thu Sep 2 21:52:35 GMT 2004


Author: jerry
Date: 2004-09-02 21:52:35 +0000 (Thu, 02 Sep 2004)
New Revision: 2191

WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/branches/SAMBA_3_0/source/printing&rev=2191&nolog=1

Log:
ensure that we assign our pid to print jobs (and not our parent's pid); ensures that spooling jobs from dead smbds are removed from the tdb
Modified:
   branches/SAMBA_3_0/source/printing/printing.c


Changeset:
Modified: branches/SAMBA_3_0/source/printing/printing.c
===================================================================
--- branches/SAMBA_3_0/source/printing/printing.c	2004-09-02 20:51:12 UTC (rev 2190)
+++ branches/SAMBA_3_0/source/printing/printing.c	2004-09-02 21:52:35 UTC (rev 2191)
@@ -159,8 +159,6 @@
 	tdb_delete(rap_tdb, data);
 }
 
-static pid_t local_pid;
-
 static int get_queue_status(int, print_status_struct *);
 
 /****************************************************************************
@@ -174,15 +172,10 @@
 	int services = lp_numservices();
 	int snum;
 
-	if (local_pid == sys_getpid())
-		return True;
-
 	unlink(lock_path("printing.tdb"));
 	pstrcpy(printing_path,lock_path("printing"));
 	mkdir(printing_path,0755);
 
-	local_pid = sys_getpid();
-
 	/* handle a Samba upgrade */
 
 	for (snum = 0; snum < services; snum++) {
@@ -599,6 +592,7 @@
 	/* Remove from printing.tdb */
 
 	tdb_delete(pdb->tdb, print_key(jobid));
+	remove_from_jobs_changed(snum, jobid);
 	release_print_db(pdb);
 	rap_jobid_delete(snum, jobid);
 }
@@ -1448,7 +1442,7 @@
 	if (!pjob)
 		return -1;
 	/* don't allow another process to get this info - it is meaningless */
-	if (pjob->pid != local_pid)
+	if (pjob->pid != sys_getpid())
 		return -1;
 	return pjob->fd;
 }
@@ -1462,7 +1456,7 @@
 char *print_job_fname(int snum, uint32 jobid)
 {
 	struct printjob *pjob = print_job_find(snum, jobid);
-	if (!pjob || pjob->spooled || pjob->pid != local_pid)
+	if (!pjob || pjob->spooled || pjob->pid != sys_getpid())
 		return NULL;
 	return pjob->filename;
 }
@@ -1501,7 +1495,7 @@
 BOOL print_job_set_name(int snum, uint32 jobid, char *name)
 {
 	struct printjob *pjob = print_job_find(snum, jobid);
-	if (!pjob || pjob->pid != local_pid)
+	if (!pjob || pjob->pid != sys_getpid())
 		return False;
 
 	fstrcpy(pjob->jobname, name);
@@ -1598,8 +1592,6 @@
 
 	if (pjob->spooled && pjob->sysjob != -1)
 		result = (*(current_printif->job_delete))(snum, pjob);
-	else
-		remove_from_jobs_changed(snum, jobid);
 
 	/* Delete the tdb entry if the delete succeeded or the job hasn't
 	   been spooled. */
@@ -1814,7 +1806,7 @@
 	if (!pjob)
 		return -1;
 	/* don't allow another process to get this info - it is meaningless */
-	if (pjob->pid != local_pid)
+	if (pjob->pid != sys_getpid())
 		return -1;
 
 	return_code = write(pjob->fd, buf, size);
@@ -2079,7 +2071,7 @@
 	
 	ZERO_STRUCT(pjob);
 	
-	pjob.pid = local_pid;
+	pjob.pid = sys_getpid();
 	pjob.sysjob = -1;
 	pjob.fd = -1;
 	pjob.starttime = time(NULL);
@@ -2149,7 +2141,7 @@
 	if (!pjob)
 		return;
 	/* don't allow another process to get this info - it is meaningless */
-	if (pjob->pid != local_pid)
+	if (pjob->pid != sys_getpid())
 		return;
 
 	pjob->page_count++;
@@ -2172,7 +2164,7 @@
 	if (!pjob)
 		return False;
 
-	if (pjob->spooled || pjob->pid != local_pid)
+	if (pjob->spooled || pjob->pid != sys_getpid())
 		return False;
 
 	if (normal_close && (sys_fstat(pjob->fd, &sbuf) == 0)) {
@@ -2228,7 +2220,6 @@
 	/* Still need to add proper error return propagation! 010122:JRR */
 	unlink(pjob->filename);
 	pjob_delete(snum, jobid);
-	remove_from_jobs_changed(snum, jobid);
 	return False;
 }
 



More information about the samba-cvs mailing list