+static int smbXsrv_session_destructor(struct smbXsrv_session *session)
+{
+ struct smbXsrv_session_table *table;
+ struct db_record *local_rec = NULL;
+ struct db_record *global_rec = NULL;
+ NTSTATUS status;
+
+ if (session->connection == NULL) {
+ return 0;
+ }
+
+ table = &session->connection->session_table;
+ session->connection = NULL;
+
+ local_rec = session->db_rec;
+ session->db_rec = NULL;
+ if (local_rec == NULL) {
+ uint8_t key_buf[sizeof(uint32_t)];
+ TDB_DATA key;
+
+ RSIVAL(key_buf, 0, session->local_id);
+ key = make_tdb_data(key_buf, sizeof(key_buf));
+
+ local_rec = dbwrap_fetch_locked(table->local.db_ctx,
+ session, key);
+ }
+
+ if (local_rec != NULL) {
+ status = dbwrap_record_delete(local_rec);
+ }
+
+ global_rec = session->global->db_rec;
+ session->global->db_rec = NULL;
+ if (global_rec == NULL) {
+ uint8_t key_buf[sizeof(uint32_t)];
+ TDB_DATA key;
+
+ RSIVAL(key_buf, 0, session->global->session_global_id);
+ key = make_tdb_data(key_buf, sizeof(key_buf));
+
+ global_rec = dbwrap_fetch_locked(table->global.db_ctx,
+ session->global, key);
+ }
+
+ if (global_rec != NULL) {
+ status = dbwrap_record_delete(global_rec);
+ }
+ TALLOC_FREE(session->global);
+
+ return 0;
+}
+