kill shred thread after abort or offline drive

This commit is contained in:
Hendrik Schutter 2020-08-23 10:42:03 +02:00
parent c6a8fd861d
commit ec300d7c75
4 changed files with 21 additions and 12 deletions

View File

@ -2,7 +2,7 @@
echo "starting SHRED DUMMY" echo "starting SHRED DUMMY"
for i in {0..100..20} for i in {0..100..10}
do do
echo "DUMMY shred $i%" echo "DUMMY shred $i%"
sleep 1 sleep 1

View File

@ -182,7 +182,7 @@ void reHDD::filterNewDrives(vector <Drive>* pvecOldDrives, vector <Drive>* pvecN
bOldDriveIsOffline = false; bOldDriveIsOffline = false;
// copy old drive instance date in new instance // copy old drive instance date in new instance
itNew->state = itOld->state; //copy state itNew->state = itOld->state; //copy state
itNew->setTaskPercentage(itOld->getTaskPercentage()); //copy percentage itNew->setTaskPercentage(itOld->getTaskPercentage()); //copy percentage
itNew->bWasDeleteted = itOld->bWasDeleteted; //copy finished task delete itNew->bWasDeleteted = itOld->bWasDeleteted; //copy finished task delete
itNew->bWasShredded = itOld->bWasShredded; //copy finished task shred itNew->bWasShredded = itOld->bWasShredded; //copy finished task shred
} }
@ -192,6 +192,7 @@ void reHDD::filterNewDrives(vector <Drive>* pvecOldDrives, vector <Drive>* pvecN
{ {
//cout << "offline drive found: " << itOld->getPath() << endl; //cout << "offline drive found: " << itOld->getPath() << endl;
//TODO kill task thread if running //TODO kill task thread if running
itOld->state = Drive::NONE;
} }
} }

View File

@ -35,15 +35,22 @@ void Shred::shredDrive(Drive* drive, int* fdInformPipeWrite)
while ((getline(&cLine, &len, shredCmdOutput)) != -1) while ((getline(&cLine, &len, shredCmdOutput)) != -1)
{ {
string sLine = string(cLine); if(drive->state == Drive::SHRED_ACTIVE)
string search("%");
size_t found = sLine.find(search);
if (found!=string::npos)
{ {
sLine.erase(0, sLine.find("%")-3); string sLine = string(cLine);
sLine.erase(std::remove(sLine.begin(), sLine.end(), '\n'), sLine.end()); string search("%");
drive->setTaskPercentage(stoi(sLine)); size_t found = sLine.find(search);
write(*fdInformPipeWrite, "A",1); if (found!=string::npos)
{
sLine.erase(0, sLine.find("%")-3);
sLine.erase(std::remove(sLine.begin(), sLine.end(), '\n'), sLine.end());
drive->setTaskPercentage(stoi(sLine));
write(*fdInformPipeWrite, "A",1);
}
}
else
{
return; //end shredding task
} }
} }
fclose(shredCmdOutput); fclose(shredCmdOutput);

View File

@ -67,12 +67,15 @@ void TUI::updateTUI(vector <Drive>* pvecDrives, int32_t i32SelectedEntry)
systemview=createSystemStats((int)(stdscrX/3), 10, (stdscrY-11)); systemview=createSystemStats((int)(stdscrX/3), 10, (stdscrY-11));
wrefresh(systemview); wrefresh(systemview);
delwin(detailview);
vector <Drive>::iterator it; vector <Drive>::iterator it;
for (it = pvecDrives->begin(); it != pvecDrives->end(); ++it) for (it = pvecDrives->begin(); it != pvecDrives->end(); ++it)
{ {
string sModelFamily = it->getModelFamily(); string sModelFamily = it->getModelFamily();
string sModelName = it->getModelName(); string sModelName = it->getModelName();
string sCapacity = it->sCapacityToText(); string sCapacity = it->sCapacityToText();
string sState = " ";
bool bSelectedEntry = false; bool bSelectedEntry = false;
@ -82,7 +85,6 @@ void TUI::updateTUI(vector <Drive>* pvecDrives, int32_t i32SelectedEntry)
displaySelectedDrive(pvecDrives->at(i32SelectedEntry), stdscrX, stdscrY); displaySelectedDrive(pvecDrives->at(i32SelectedEntry), stdscrX, stdscrY);
} }
string sState = " ";
switch (it->state) switch (it->state)
{ {
@ -298,7 +300,6 @@ WINDOW* TUI::createSystemStats(int iXSize, int iYSize, int iYStart)
WINDOW* TUI::createMenuView(int iXSize, int iYSize, int iXStart, int iYStart, struct MenuState menustate) WINDOW* TUI::createMenuView(int iXSize, int iYSize, int iXStart, int iYStart, struct MenuState menustate)
{ {
WINDOW *newWindow; WINDOW *newWindow;
newWindow = newwin(iYSize, iXSize, iYStart, iXStart); newWindow = newwin(iYSize, iXSize, iYStart, iXStart);