kauth_cred_t vc_ucred; /* per thread credential */
};
+/*
+ * struct representing a document "tombstone" that's recorded
+ * when a thread manipulates files marked with a document-id.
+ * if the thread recreates the same item, this tombstone is
+ * used to preserve the document_id on the new file.
+ *
+ * It is a separate structure because of its size - we want to
+ * allocate it on demand instead of just stuffing it into the
+ * uthread structure.
+ */
+struct doc_tombstone {
+ struct vnode *t_lastop_parent;
+ struct vnode *t_lastop_item;
+ uint32_t t_lastop_parent_vid;
+ uint32_t t_lastop_item_vid;
+ uint64_t t_lastop_fileid;
+ uint64_t t_lastop_document_id;
+ unsigned char t_lastop_filename[NAME_MAX+1];
+};
+
#endif /* !__LP64 || XNU_KERNEL_PRIVATE */
#ifdef BSD_KERNEL_PRIVATE
struct uthread {
/* syscall parameters, results and catches */
u_int64_t uu_arg[8]; /* arguments to current system call */
- int *uu_ap; /* pointer to arglist */
int uu_rval[2];
+ unsigned int syscall_code; /* current syscall code */
/* thread exception handling */
mach_exception_code_t uu_code; /* ``code'' to trap */
struct _select_data {
u_int64_t abstime;
char * wql;
- int poll;
- int error;
int count;
+ struct select_nocancel_args *args; /* original syscall arguments */
+ int32_t *retval; /* place to store return val */
} ss_select_data;
struct _kqueue_scan {
kevent_callback_t call; /* per-event callback */
} uu_kauth;
struct ksyn_waitq_element uu_kwe; /* user for pthread synch */
+
+ struct _waitid_data {
+ struct waitid_nocancel_args *args; /* original syscall arguments */
+ int32_t *retval; /* place to store return val */
+ } uu_waitid_data;
+
+ struct _wait4_data {
+ struct wait4_nocancel_args *args; /* original syscall arguments */
+ int32_t *retval; /* place to store return val */
+ } uu_wait4_data;
} uu_kevent;
+ /* Persistent memory allocations across system calls */
struct _select {
u_int32_t *ibits, *obits; /* bits to select on */
uint nbytes; /* number of bytes in ibits and obits */
- struct _select_data *data;
} uu_select; /* saved state for select() */
/* internal support for continuation framework */
struct kern_sigaltstack uu_sigstk;
vnode_t uu_vreclaims;
vnode_t uu_cdir; /* per thread CWD */
- int uu_notrigger; /* XXX - flag for autofs */
int uu_dupfd; /* fd in fdesc_open/dupfdopen */
int uu_defer_reclaims;
void * uu_threadlist;
char * pth_name;
struct label * uu_label; /* MAC label */
+
+ /* Document Tracking struct used to track a "tombstone" for a document */
+ struct doc_tombstone *t_tombstone;
};
typedef struct uthread * uthread_t;