Fixed BUG in FindUnit() and Register/UnregisterInterface().

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@5160 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Waldemar Kornewald
2003-10-25 13:00:28 +00:00
parent 20826c8ed2
commit a10a3d49d6
2 changed files with 13 additions and 5 deletions
@@ -88,7 +88,7 @@ deleter_thread(void *data)
manager->DeleterThreadEvent();
// check if the manager is being destroyed
if(receive_data_with_timeout(&sender, &code, NULL, 0, 50000) == B_OK)
if(receive_data_with_timeout(&sender, &code, NULL, 0, 500) == B_OK)
return B_OK;
}
@@ -261,6 +261,7 @@ PPPManager::CreateInterface(const driver_settings *settings,
interface_entry *entry = new interface_entry;
entry->accessing = 1;
entry->deleting = false;
fRegisterRequestor = PPP_UNDEFINED_INTERFACE_ID;
entry->interface = new PPPInterface(id, settings,
parentEntry ? parentEntry->interface : NULL);
@@ -269,8 +270,10 @@ PPPManager::CreateInterface(const driver_settings *settings,
delete entry;
return PPP_UNDEFINED_INTERFACE_ID;
}
fEntries.AddItem(entry);
if(fRegisterRequestor == id)
entry->interface->RegisterInterface();
locker.UnlockNow();
if(!Report(PPP_MANAGER_REPORT, PPP_REPORT_INTERFACE_CREATED,
@@ -332,6 +335,8 @@ PPPManager::RegisterInterface(interface_id ID)
LockerHelper locker(fLock);
fRegisterRequestor = ID;
interface_entry *entry = EntryFor(ID);
if(!entry || entry->deleting)
return NULL;
@@ -354,7 +359,7 @@ PPPManager::RegisterInterface(interface_id ID)
ifp->ioctl = ppp_ifnet_ioctl;
#if DEBUG
printf("PPPManager::DeleteInterface(): Created new ifnet: %s%d\n",
printf("PPPManager::RegisterInterface(): Created new ifnet: %s%d\n",
ifp->name, ifp->if_unit);
#endif
@@ -372,6 +377,9 @@ PPPManager::UnregisterInterface(interface_id ID)
LockerHelper locker(fLock);
if(fRegisterRequestor == ID)
fRegisterRequestor = PPP_UNDEFINED_INTERFACE_ID;
interface_entry *entry = EntryFor(ID);
if(!entry)
return false;
@@ -677,7 +685,7 @@ PPPManager::FindUnit() const
qsort(units, fEntries.CountItems(), sizeof(int32), greater);
int32 unit = 0;
for(int32 index = 0; index < fEntries.CountItems() - 1; index++) {
for(int32 index = 0; index < fEntries.CountItems(); index++) {
if(units[index] > unit)
return unit;
else if(units[index] == unit)
@@ -75,7 +75,7 @@ class PPPManager {
BLocker fLock, fReportLock;
PPPReportManager fReportManager;
List<interface_entry*> fEntries;
interface_id fNextID;
interface_id fNextID, fRegisterRequestor;
thread_id fDeleterThread;
net_timer_id fPulseTimer;
};