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"
for i in {0..100..20}
for i in {0..100..10}
do
echo "DUMMY shred $i%"
sleep 1

View File

@ -182,7 +182,7 @@ void reHDD::filterNewDrives(vector <Drive>* pvecOldDrives, vector <Drive>* pvecN
bOldDriveIsOffline = false;
// copy old drive instance date in new instance
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->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;
//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)
{
string sLine = string(cLine);
string search("%");
size_t found = sLine.find(search);
if (found!=string::npos)
if(drive->state == Drive::SHRED_ACTIVE)
{
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);
string sLine = string(cLine);
string search("%");
size_t found = sLine.find(search);
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);

View File

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