+/* From reserve.c */
+void init_reservations_lock();
+void term_reservations_lock();
+void _lock_reservations(const char *file="**Unknown**", int line=0);
+void _unlock_reservations();
+void _lock_volumes(const char *file="**Unknown**", int line=0);
+void _unlock_volumes();
+void unreserve_device(DCR *dcr);
+void send_drive_reserve_messages(JCR *jcr, void sendit(const char *msg, int len, void *sarg), void *arg);
+bool find_suitable_device_for_job(JCR *jcr, RCTX &rctx);
+int search_res_for_device(RCTX &rctx);
+void release_reserve_messages(JCR *jcr);
+
+extern int reservations_lock_count;
+
+#ifdef SD_DEBUG_LOCK
+
+#define lock_reservations() \
+ do { Dmsg3(sd_dbglvl, "lock_reservations at %s:%d precnt=%d\n", \
+ __FILE__, __LINE__, \
+ reservations_lock_count); \
+ _lock_reservations(__FILE__, __LINE__); \
+ Dmsg0(sd_dbglvl, "lock_reservations: got lock\n"); \
+ } while (0)
+#define unlock_reservations() \
+ do { Dmsg3(sd_dbglvl, "unlock_reservations at %s:%d precnt=%d\n", \
+ __FILE__, __LINE__, \
+ reservations_lock_count); \
+ _unlock_reservations(); } while (0)
+
+#define lock_volumes() \
+ do { Dmsg3(sd_dbglvl, "lock_volumes at %s:%d precnt=%d\n", \
+ __FILE__, __LINE__, \
+ vol_list_lock_count); \
+ _lock_volumes(__FILE__, __LINE__); \
+ Dmsg0(sd_dbglvl, "lock_volumes: got lock\n"); \
+ } while (0)
+
+#define unlock_volumes() \
+ do { Dmsg3(sd_dbglvl, "unlock_volumes at %s:%d precnt=%d\n", \
+ __FILE__, __LINE__, \
+ vol_list_lock_count); \
+ _unlock_volumes(); } while (0)
+
+#else
+
+#define lock_reservations() _lock_reservations(__FILE__, __LINE__)
+#define unlock_reservations() _unlock_reservations()
+#define lock_volumes() _lock_volumes(__FILE__, __LINE__)
+#define unlock_volumes() _unlock_volumes()
+
+#endif
+
+/* From vol_mgr.c */
+void init_vol_list_lock();
+void term_vol_list_lock();
+VOLRES *reserve_volume(DCR *dcr, const char *VolumeName);
+VOLRES *find_volume(const char *VolumeName);
+bool free_volume(DEVICE *dev);
+bool is_vol_list_empty();
+dlist *dup_vol_list(JCR *jcr);
+void free_temp_vol_list(dlist *temp_vol_list);
+bool volume_unused(DCR *dcr);
+void create_volume_lists();
+void free_volume_lists();
+void list_volumes(void sendit(const char *msg, int len, void *sarg), void *arg);
+bool is_volume_in_use(DCR *dcr);
+extern int vol_list_lock_count;
+void add_read_volume(JCR *jcr, const char *VolumeName);
+void remove_read_volume(JCR *jcr, const char *VolumeName);
+
+