void CData::remove(int indx) { if (indx >= 0 && indx < (int)m_lstSahpes.size()) { std::list<CShape_Base*>::iterator it = m_lstSahpes.begin(); for (int i = 0; i <= indx; ++i) { ++it; } m_lstSahpes.erase(it); notify_remove(indx); } }
/** * e_data_book_view_notify_remove: * @book_view: an #EDataBookView * @id: a unique contact ID * * Notify listeners that a contact specified by @id * was removed from @book_view. **/ void e_data_book_view_notify_remove (EDataBookView *book_view, const gchar *id) { EDataBookViewPrivate *priv = E_DATA_BOOK_VIEW_GET_PRIVATE (book_view); if (!priv->running) return; g_mutex_lock (priv->pending_mutex); if (id_is_in_view (book_view, id)) notify_remove (book_view, id); g_mutex_unlock (priv->pending_mutex); }
void file_free(struct smb_request *req, files_struct *fsp) { struct smbd_server_connection *sconn = fsp->conn->sconn; uint64_t fnum = fsp->fnum; if (fsp->notify) { struct notify_context *notify_ctx = fsp->conn->sconn->notify_ctx; notify_remove(notify_ctx, fsp); TALLOC_FREE(fsp->notify); } /* Ensure this event will never fire. */ TALLOC_FREE(fsp->update_write_time_event); if (fsp->op != NULL) { fsp->op->compat = NULL; } TALLOC_FREE(fsp->op); if ((req != NULL) && (fsp == req->chain_fsp)) { req->chain_fsp = NULL; } /* * Clear all possible chained fsp * pointers in the SMB2 request queue. */ if (req != NULL && req->smb2req) { remove_smb2_chained_fsp(fsp); } /* Closing a file can invalidate the positive cache. */ if (fsp == sconn->fsp_fi_cache.fsp) { ZERO_STRUCT(sconn->fsp_fi_cache); } /* Drop all remaining extensions. */ vfs_remove_all_fsp_extensions(fsp); fsp_free(fsp); DEBUG(5,("freed files structure %llu (%u used)\n", (unsigned long long)fnum, (unsigned int)sconn->num_files)); }
/** * e_data_cal_view_notify_objects_removed: * @query: A query object. * @ids: List of IDs for the objects that have been removed. * * Notifies all query listener of the removal of a list of objects. */ void e_data_cal_view_notify_objects_removed (EDataCalView *view, const GList *ids) { EDataCalViewPrivate *priv; const GList *l; g_return_if_fail (view && E_IS_DATA_CAL_VIEW (view)); priv = view->priv; if (ids == NULL) return; g_mutex_lock (priv->pending_mutex); for (l = ids; l; l = l->next) { ECalComponentId *id = l->data; if (g_hash_table_lookup (priv->ids, id)) notify_remove (view, id); } g_mutex_unlock (priv->pending_mutex); }
/** * e_data_book_view_notify_update: * @book_view: an #EDataBookView * @contact: an #EContact * * Notify listeners that @contact has changed. This can * trigger an add, change or removal event depending on * whether the change causes the contact to start matching, * no longer match, or stay matching the query specified * by @book_view. **/ void e_data_book_view_notify_update (EDataBookView *book_view, EContact *contact) { EDataBookViewPrivate *priv = book_view->priv; gboolean currently_in_view, want_in_view; const gchar *id; gchar *vcard; if (!priv->running) return; g_mutex_lock (priv->pending_mutex); id = e_contact_get_const (contact, E_CONTACT_UID); currently_in_view = id_is_in_view (book_view, id); want_in_view = e_book_backend_sexp_match_contact (priv->card_sexp, contact); if (want_in_view) { vcard = e_vcard_to_string (E_VCARD (contact), EVC_FORMAT_VCARD_30); if (currently_in_view) notify_change (book_view, vcard); else notify_add (book_view, id, vcard); g_free (vcard); } else { if (currently_in_view) notify_remove (book_view, id); /* else nothing; we're removing a card that wasn't there */ } g_mutex_unlock (priv->pending_mutex); }
/** * e_data_book_view_notify_update_vcard: * @book_view: an #EDataBookView * @vcard: a plain vCard * * Notify listeners that @vcard has changed. This can * trigger an add, change or removal event depending on * whether the change causes the contact to start matching, * no longer match, or stay matching the query specified * by @book_view. This method should be preferred over * #e_data_book_view_notify_update when the native * representation of a contact is a vCard. **/ void e_data_book_view_notify_update_vcard (EDataBookView *book_view, gchar *vcard) { EDataBookViewPrivate *priv = book_view->priv; gboolean currently_in_view, want_in_view; const gchar *id; EContact *contact; if (!priv->running) { g_free (vcard); return; } g_mutex_lock (priv->pending_mutex); contact = e_contact_new_from_vcard (vcard); id = e_contact_get_const (contact, E_CONTACT_UID); currently_in_view = id_is_in_view (book_view, id); want_in_view = e_book_backend_sexp_match_contact (priv->card_sexp, contact); if (want_in_view) { if (currently_in_view) notify_change (book_view, vcard); else notify_add (book_view, id, vcard); } else { if (currently_in_view) notify_remove (book_view, id); } /* Do this last so that id is still valid when notify_ is called */ g_object_unref (contact); g_free (vcard); g_mutex_unlock (priv->pending_mutex); }
void file_free(struct smb_request *req, files_struct *fsp) { struct smbd_server_connection *sconn = fsp->conn->sconn; DLIST_REMOVE(sconn->files, fsp); SMB_ASSERT(sconn->num_files > 0); sconn->num_files--; TALLOC_FREE(fsp->fake_file_handle); if (fsp->fh->ref_count == 1) { TALLOC_FREE(fsp->fh); } else { fsp->fh->ref_count--; } if (fsp->notify) { struct notify_context *notify_ctx = fsp->conn->sconn->notify_ctx; notify_remove(notify_ctx, fsp); TALLOC_FREE(fsp->notify); } /* Ensure this event will never fire. */ TALLOC_FREE(fsp->oplock_timeout); /* Ensure this event will never fire. */ TALLOC_FREE(fsp->update_write_time_event); bitmap_clear(sconn->file_bmap, fsp->fnum - FILE_HANDLE_OFFSET); DEBUG(5,("freed files structure %d (%u used)\n", fsp->fnum, (unsigned int)sconn->num_files)); fsp->conn->num_files_open--; if ((req != NULL) && (fsp == req->chain_fsp)) { req->chain_fsp = NULL; } /* * Clear all possible chained fsp * pointers in the SMB2 request queue. */ if (req != NULL && req->smb2req) { remove_smb2_chained_fsp(fsp); } /* Closing a file can invalidate the positive cache. */ if (fsp == sconn->fsp_fi_cache.fsp) { ZERO_STRUCT(sconn->fsp_fi_cache); } /* Drop all remaining extensions. */ while (fsp->vfs_extension) { vfs_remove_fsp_extension(fsp->vfs_extension->owner, fsp); } /* this is paranoia, just in case someone tries to reuse the information */ ZERO_STRUCTP(fsp); /* fsp->fsp_name is a talloc child and is free'd automatically. */ TALLOC_FREE(fsp); }