Sto progettando un sistema in C/C++ che è estendibile con tutti i tipi di plugin. Esiste una API pubblica C ben definita che funziona principalmente con (const) char*
e altri tipi di puntatore. I plug-in sono compilati in file .so o .dll e l'applicazione principale li carica all'avvio e successivamente li scarica o li ricarica su richiesta.Plugin in esecuzione in una sandbox
I plugin possono venire in da varie fonti, affidabili o non così :)
Ora, vorrei fare in modo che, se un plug-in fa qualcosa di stupido (come tenta di liberare una memoria che è stato non dovrebbe liberare), questa azione non abbatte l'intero sistema, ma si limita a notare il sistema principale relativo al plug-in non funzionante per rimuoverlo dalla coda.
Il codice chiamate sono stato fatto nel modo seguente:
const char* data = get_my_data();
for(int i = 0; i<plugins; i++)
{
plugins[i]->execute(data);
}
ma se plugin[0]
frees "per caso" la stringa di dati o sovrascrive o per errore salti per affrontare 0x0 questo avrebbe portato l'intero sistema e io non voglio questo Come posso evitare questo tipo di catastrofe. (Lo so, posso duplicare la stringa data
... questo non risolve il mio problema :))
La mia risposta ti ha aiutato a risolvere questo? Se è così, ti preghiamo di accettarlo come risposta corretta. –