return 0;
}
-static void pjob_store_notify(const char* sharename, uint32 jobid, struct printjob *old_data,
+static void pjob_store_notify(struct tevent_context *ev,
+ struct messaging_context *msg_ctx,
+ const char* sharename, uint32 jobid,
+ struct printjob *old_data,
struct printjob *new_data)
{
bool new_job = False;
--jerry (i'll feel dirty for this) */
if (new_job) {
- notify_job_submitted(sharename, jobid, new_data->starttime);
- notify_job_username(server_event_context(),
- server_messaging_context(),
+ notify_job_submitted(ev, msg_ctx,
+ sharename, jobid, new_data->starttime);
+ notify_job_username(ev, msg_ctx,
sharename, jobid, new_data->user);
}
if (new_job || !strequal(old_data->jobname, new_data->jobname))
- notify_job_name(server_event_context(),
- server_messaging_context(),
+ notify_job_name(ev, msg_ctx,
sharename, jobid, new_data->jobname);
/* Job attributes of a new job or attributes that can be
modified. */
if (new_job || !strequal(old_data->jobname, new_data->jobname))
- notify_job_name(server_event_context(),
- server_messaging_context(),
+ notify_job_name(ev, msg_ctx,
sharename, jobid, new_data->jobname);
if (new_job || old_data->status != new_data->status)
- notify_job_status(server_event_context(),
- server_messaging_context(),
+ notify_job_status(ev, msg_ctx,
sharename, jobid,
map_to_spoolss_status(new_data->status));
if (new_job || old_data->size != new_data->size)
- notify_job_total_bytes(server_event_context(),
- server_messaging_context(),
+ notify_job_total_bytes(ev, msg_ctx,
sharename, jobid, new_data->size);
if (new_job || old_data->page_count != new_data->page_count)
- notify_job_total_pages(server_event_context(),
- server_messaging_context(),
+ notify_job_total_pages(ev, msg_ctx,
sharename, jobid, new_data->page_count);
}
Store a job structure back to the database.
****************************************************************************/
-static bool pjob_store(const char* sharename, uint32 jobid, struct printjob *pjob)
+static bool pjob_store(struct tevent_context *ev,
+ struct messaging_context *msg_ctx,
+ const char* sharename, uint32 jobid,
+ struct printjob *pjob)
{
uint32_t tmp;
TDB_DATA old_data, new_data;
{
if ( unpack_pjob( old_data.dptr, old_data.dsize, &old_pjob ) != -1 )
{
- pjob_store_notify( sharename, jobid, &old_pjob , pjob );
+ pjob_store_notify(server_event_context(),
+ msg_ctx,
+ sharename, jobid, &old_pjob,
+ pjob);
talloc_free(old_pjob.devmode);
}
}
else {
/* new job */
- pjob_store_notify( sharename, jobid, NULL, pjob );
+ pjob_store_notify(server_event_context(), msg_ctx,
+ sharename, jobid, NULL, pjob);
}
}
Remove a job structure from the database.
****************************************************************************/
-void pjob_delete(const char* sharename, uint32 jobid)
+static void pjob_delete(struct tevent_context *ev,
+ struct messaging_context *msg_ctx,
+ const char* sharename, uint32 jobid)
{
uint32_t tmp;
struct printjob *pjob;
properly. */
job_status = JOB_STATUS_DELETING|JOB_STATUS_DELETED;
- notify_job_status(server_event_context(),
- server_messaging_context(),
- sharename, jobid, job_status);
+ notify_job_status(ev, msg_ctx, sharename, jobid, job_status);
/* Remove from printing.tdb */
List a unix job in the print database.
****************************************************************************/
-static void print_unix_job(const char *sharename, print_queue_struct *q, uint32 jobid)
+static void print_unix_job(struct tevent_context *ev,
+ struct messaging_context *msg_ctx,
+ const char *sharename, print_queue_struct *q,
+ uint32 jobid)
{
struct printjob pj, *old_pj;
fstrcpy(pj.user, old_pj ? old_pj->user : q->fs_user);
fstrcpy(pj.queuename, old_pj ? old_pj->queuename : sharename );
- pjob_store(sharename, jobid, &pj);
+ pjob_store(ev, msg_ctx, sharename, jobid, &pj);
}
time_t lpq_time;
const char *lprm_command;
struct printif *print_if;
+ struct tevent_context *ev;
+ struct messaging_context *msg_ctx;
};
/****************************************************************************
if (i == ts->qcount) {
DEBUG(10,("traverse_fn_delete: pjob %u deleted due to !smbjob\n",
(unsigned int)jobid ));
- pjob_delete(ts->sharename, jobid);
+ pjob_delete(ts->ev, ts->msg_ctx,
+ ts->sharename, jobid);
return 0;
}
if (!process_exists_by_pid(pjob.pid)) {
DEBUG(10,("traverse_fn_delete: pjob %u deleted due to !process_exists (%u)\n",
(unsigned int)jobid, (unsigned int)pjob.pid ));
- pjob_delete(ts->sharename, jobid);
+ pjob_delete(ts->ev, ts->msg_ctx,
+ ts->sharename, jobid);
} else
ts->total_jobs++;
return 0;
if ( result != 0 ) {
/* if we can't delete, then reset the job status */
pjob.status = LPQ_QUEUED;
- pjob_store(ts->sharename, jobid, &pjob);
+ pjob_store(ts->ev, ts->msg_ctx,
+ ts->sharename, jobid, &pjob);
}
else {
/* if we deleted the job, the remove the tdb record */
- pjob_delete(ts->sharename, jobid);
+ pjob_delete(ts->ev,
+ ts->msg_ctx,
+ ts->sharename, jobid);
pjob.status = LPQ_DELETED;
}
(unsigned int)jobid,
(unsigned int)pjob.starttime,
(unsigned int)ts->lpq_time ));
- pjob_delete(ts->sharename, jobid);
+ pjob_delete(ts->ev, ts->msg_ctx,
+ ts->sharename, jobid);
} else
ts->total_jobs++;
return 0;
main work for updating the lpq cahe for a printer queue
****************************************************************************/
-static void print_queue_update_internal( const char *sharename,
+static void print_queue_update_internal( struct tevent_context *ev,
+ struct messaging_context *msg_ctx,
+ const char *sharename,
struct printif *current_printif,
char *lpq_command, char *lprm_command )
{
if (jobid == (uint32)-1) {
/* assume its a unix print job */
- print_unix_job(sharename, &queue[i], jobid);
+ print_unix_job(ev, msg_ctx,
+ sharename, &queue[i], jobid);
continue;
}
/* err, somethings wrong. Probably smbd was restarted
with jobs in the queue. All we can do is treat them
like unix jobs. Pity. */
- print_unix_job(sharename, &queue[i], jobid);
+ print_unix_job(ev, msg_ctx,
+ sharename, &queue[i], jobid);
continue;
}
if ( pjob->status != LPQ_DELETING )
pjob->status = queue[i].status;
- pjob_store(sharename, jobid, pjob);
+ pjob_store(ev, msg_ctx, sharename, jobid, pjob);
check_job_changed(sharename, jcdata, jobid);
}
tstruct.sharename = sharename;
tstruct.lprm_command = lprm_command;
tstruct.print_if = current_printif;
+ tstruct.ev = ev;
+ tstruct.msg_ctx = msg_ctx;
tdb_traverse(pdb->tdb, traverse_fn_delete, (void *)&tstruct);
/* do the main work now */
- print_queue_update_internal( sharename, current_printif,
- lpq_command, lprm_command );
+ print_queue_update_internal(server_event_context(),
+ server_messaging_context(),
+ sharename, current_printif,
+ lpq_command, lprm_command);
/* Delete our pid from the db. */
set_updating_pid(sharename, False);
return False;
fstrcpy(pjob->jobname, name);
- return pjob_store(sharename, jobid, pjob);
+ return pjob_store(server_event_context(), server_messaging_context(),
+ sharename, jobid, pjob);
}
/****************************************************************************
/* Set the tdb entry to be deleting. */
pjob->status = LPQ_DELETING;
- pjob_store(sharename, jobid, pjob);
+ pjob_store(server_event_context(), server_messaging_context(),
+ sharename, jobid, pjob);
if (pjob->spooled && pjob->sysjob != -1)
{
if (!pdb)
return False;
- pjob_delete(sharename, jobid);
+ pjob_delete(server_event_context(),
+ server_messaging_context(),
+ sharename, jobid);
/* Ensure we keep a rough count of the number of total jobs... */
tdb_change_int32_atomic(pdb->tdb, "INFO/total_jobs", &njobs, -1);
release_print_db(pdb);
if (return_code>0) {
pjob->size += size;
- pjob_store(sharename, jobid, pjob);
+ pjob_store(server_event_context(), server_messaging_context(),
+ sharename, jobid, pjob);
}
return return_code;
}
goto fail;
}
- pjob_store(sharename, jobid, &pjob);
+ pjob_store(server_event_context(), msg_ctx, sharename, jobid, &pjob);
/* Update the 'jobs changed' entry used by print_queue_status. */
add_to_jobs_changed(pdb, jobid);
fail:
if (jobid != -1) {
- pjob_delete(sharename, jobid);
+ pjob_delete(server_event_context(), msg_ctx, sharename, jobid);
}
release_print_db(pdb);
return;
pjob->page_count++;
- pjob_store(sharename, jobid, pjob);
+ pjob_store(server_event_context(), server_messaging_context(),
+ sharename, jobid, pjob);
}
/****************************************************************************
DEBUG(5,("print_job_end: canceling spool of %s (%s)\n",
pjob->filename, pjob->size ? "deleted" : "zero length" ));
unlink(pjob->filename);
- pjob_delete(sharename, jobid);
+ pjob_delete(server_event_context(), msg_ctx, sharename, jobid);
return NT_STATUS_OK;
}
pjob->spooled = True;
pjob->status = LPQ_QUEUED;
- pjob_store(sharename, jobid, pjob);
+ pjob_store(server_event_context(), msg_ctx, sharename, jobid, pjob);
/* make sure the database is up to date */
if (print_cache_expired(lp_const_servicename(snum), True))
/* Still need to add proper error return propagation! 010122:JRR */
pjob->fd = -1;
unlink(pjob->filename);
- pjob_delete(sharename, jobid);
+ pjob_delete(server_event_context(), msg_ctx, sharename, jobid);
return status;
}