+ ldp_fd_entry_t *fde;
+ u32 fd_index, sid;
+
+ if (!ldp_fd_is_sid (fd))
+ return INVALID_SESSION_ID;
+
+ fd_index = fd - ldp->sid_bit_val;
+ fde = ldp_fd_entry_get_w_lock (fd_index);
+ sid = fde ? fde->sid : INVALID_SESSION_ID;
+ clib_rwlock_reader_unlock (&ldp->fd_table_lock);
+
+ /* Handle forks */
+ sid = vppcom_session_handle (vppcom_session_index (sid));
+ return sid;
+}
+
+static void
+ldp_fd_free_w_sid (u32 sid)
+{
+ ldp_fd_entry_t *fde;
+ u32 fd_index;
+ int fd;
+
+ fd = ldp_fd_from_sid (sid);
+ if (!fd)
+ return;
+
+ fd_index = fd - ldp->sid_bit_val;
+ fde = ldp_fd_entry_get_w_lock (fd_index);
+ if (fde)
+ {
+ hash_unset (ldp->sid_to_fd_table, fde->sid);
+ pool_put (ldp->fd_pool, fde);
+ }
+ clib_rwlock_writer_unlock (&ldp->fd_table_lock);